我有一个很基本的问题:如何检查枚举值列表中是否包含给定值?

例如,我有这个枚举:

public enum UserStatus
{
    Unverified,
    Active,
    Removed,
    Suspended,
    Banned
}

现在我要检查status in (Unverified, Active)
我知道这可行:
bool ok = status == UserStatus.Unverified || status == UserStatus.Active;

但是必须有一种更优雅的方式来编写此代码。

this question的主题非常相似,但这涉及的是标志枚举,这不是标志枚举。

最佳答案

这是一种扩展方法,在很多情况下都可以提供帮助。

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));

08-06 18:51