質問
次のような列挙型があるとしましょう(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
};
(今、このように曜日を注文する理由は私を超えています...)
所属していません StackOverflow