web-dev-qa-db-ja.com

値は列挙リストにあります

かなり基本的な質問があります。特定の値が列挙値のリストに含まれているかどうかを確認するにはどうすればよいですか?

たとえば、私はこの列挙型を持っています:

_public enum UserStatus
{
    Unverified,
    Active,
    Removed,
    Suspended,
    Banned
}
_

次に、status in (Unverified, Active)かどうかを確認します

私はこれがうまくいくことを知っています:

_bool ok = status == UserStatus.Unverified || status == UserStatus.Active;
_

しかし、これを書くにはもっとエレガントな方法が必要です。

この質問 のトピックは非常によく似ていますが、それはフラグ列挙型を扱っており、これはフラグ列挙型ではありません。

32
Jerad Rose

以下は、さまざまな状況で役立つヘルプ拡張メソッドです。

public static class Ext
{
    public static bool In<T>(this T val, params T[] values) where T : struct
    {
        return values.Contains(val);
    }
}

使用法:

Console.WriteLine(1.In(2, 1, 3));
Console.WriteLine(1.In(2, 3));
Console.WriteLine(UserStatus.Active.In(UserStatus.Removed, UserStatus.Banned));
67
Cheng Chen

列挙型のより長いリストである場合は、以下を使用できます。

var allowed = new List<UserStatus> { UserStatus.Unverified, UserStatus.Active };
bool ok = allowed.Contains(status);

それ以外の場合、長い||述語を回避する方法はなく、許可された各値をチェックします。

23
Femaref

使用する Enum.IsDefined

例:

public enum enStage {Work, Payment, Record, Return, Reject};
int StageValue = 4;

Enum.IsDefined(typeof(enStage), StageValue)
6
Kiran Mahale

それをカプセル化するメソッドを作成しませんか?

public bool UnVerifiedOrActive(User user)
{
    return (user.UserStatus == UserStatus.Unverified || 
            user.UserStatus == UserStatus.Active);
}
1
George Stocker
UserStatus userStatus = null;
Eum.TryParse<UserStatus>(status.ToString(), out userStatus);

if(userStatus != null)
{
  //it is not in the list
}
1
Aivan Monceller

あなたは以下を試すことができます

UserStatus ustatus;
if(Enum.TryParse<UserStatus>(c.ToString(), out ustatus))
{
 ..Your logic
}
0
Lav