107

私のクエリ文字列には、年齢変数があります ?age=New_Born

この文字列値New_Bornが Enum リストにあるかどうかを確認する方法はありますか

[Flags]
public enum Age
{
    New_Born = 1,
    Toddler = 2,
    Preschool = 4,
    Kindergarten = 8
}

現時点では if ステートメントを使用できますが、Enum リストが大きくなった場合。もっと良い方法を見つけたいです。Linq を使用することを考えていますが、その方法がわかりません。

4

7 に答える 7

174

次を使用できます。

 Enum.IsDefined(typeof(Age), youragevariable)
于 2012-05-29T17:46:58.827 に答える
51

Enum.TryParseメソッドを使用できます。

Age age;
if (Enum.TryParse<Age>("New_Born", out age))
{
    // You now have the value in age 
}
于 2012-05-29T17:48:43.343 に答える
13

成功した場合にtrueを返すTryParseメソッドを使用できます。

Age age;

if(Enum.TryParse<Age>("myString", out age))
{
   //Here you can use age
}
于 2012-05-29T17:48:41.413 に答える
3

IsDefined では大文字と小文字が区別されるため、TryParse を使用する便利な拡張メソッドがあります。

public static bool IsParsable<T>(this string value) where T : struct
{
    return Enum.TryParse<T>(value, true, out _);
}
于 2018-04-12T09:20:54.573 に答える
1

年齢を解析するには:

Age age;
if (Enum.TryParse(typeof(Age), "New_Born", out age))
  MessageBox.Show("Defined");  // Defined for "New_Born, 1, 4 , 8, 12"

定義されているかどうかを確認するには:

if (Enum.IsDefined(typeof(Age), "New_Born"))
   MessageBox.Show("Defined");

Age列挙型の使用方法によっては、フラグが適切でない場合があります。ご存知かもしれませんが、[Flags](ビットマスクのように)複数の値を許可することを示します。 複数の値があるため、はIsDefinedfalseを返します。Age.Toddler | Age.Preschool

于 2012-05-29T17:47:23.547 に答える
1

目標を達成するには Enum.TryParse を使用する必要があります

これは例です:

[Flags]
private enum TestEnum
{
    Value1 = 1,
    Value2 = 2
}

static void Main(string[] args)
{
    var enumName = "Value1";
    TestEnum enumValue;

    if (!TestEnum.TryParse(enumName, out enumValue))
    {
        throw new Exception("Wrong enum value");
    }

    // enumValue contains parsed value
}
于 2012-05-29T17:52:24.123 に答える