質問

次のような列挙型があるとしましょう(MSDNの例から引用):

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

次のコードでisを使用できます:

int today = (int)Days.Sun;

質問:

列挙型を評価できますか?値が「Sun」の変数Dayがあるとします。 Days.DayはDays.Sunに評価されますか?

ありがとう!

日の例にとらわれず、比較などを使用すべきだと教えてください...よりコンパクトなので、配列の使用を列挙型に置き換えたいと考えています。私が探しているのは、本質的に配列に似た列挙型から値を取得する機能です:

myArray [Day]ここで、日は配列キーに評価されます。...

役に立ちましたか?

解決

私はあなたが持っていると言っているのです:

string day = "Sun";

そして値 Days.Sun を取得しますか?

もしそうなら、使用してください:

string day = "Sun";
Day day = (Day) Enum.Parse(typeof(Days), day);

他のヒント

はい、できます。 enum とその基になる型の間を自由にキャストできます。

using System;

class Program
{
    static void Main()
    {
        // prints "zero"
        Console.WriteLine((Foo)0);
        // prints "1"
        Console.WriteLine((int)Foo.one);
    }
}

enum Foo { zero, one, two };

文字列値も解析できます。 Enum.Parse

を使用する
[TestFixture]
public class EnumParsingSO
{
    public enum Days
    {
        Sat = 1,
        Sun,
        Mon,
        Tues
    }

    [Test]
    public void EnumFromString()
    {
        Days expected = Days.Mon;
        int expectedInt = 3;
        Days actual = (Days)Enum.Parse(typeof(Days), "Mon");

        Assert.AreEqual(expected, actual);
        Assert.AreEqual(expectedInt, (int)actual);
    }
}

Andrewが言うように、enumからその基になる型にキャストできます。また、2つの間のボックス化を解除することもでき、定数0から任意の列挙型への暗黙的な変換があります。

using System;

enum Demo { Foo, Bar, Baz };

class Test
{
    static void Main()
    {
        int i = 2;
        object o = i;
        // Unboxing from int to Demo
        Demo d = (Demo) o;
        Console.WriteLine(d);

        o = Demo.Baz;
        // Unboxing from Demo to int
        i = (int) o;
        Console.WriteLine(i);

        // Implicit conversion of 0
        d = 0;
        Console.WriteLine(d);
    }
}

int yesの場合、stringの場合はこれ

はい、できます。列挙値ごとにネイティブ整数値を指定するだけです。あなたの例から:

enum Days {
    Sat=1, 
    Sun=2, 
    Mon=3, 
    Tue=4, 
    Wed=5, 
    Thu=6, 
    Fri=7
};

(今、このように曜日を注文する理由は私を超えています...)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top