如何检测传递给Enum []的枚举类型

时间:2015-05-07 12:40:51

标签: c# enums ienumerable

在我的MVC项目中,我有MyEnum:

public enum MyEnum
{
    a,
    b,
    c,
    d
}

我也有课:

public class MyClass
{    
    public MyEnum SelectType { get; set; }

    public Enum[] NotSupportedTypes{ get; set; }
}

NotSupportedTypes课程中,我可以使用 Enum[]类型。

当我创建课程MyClass的对象时,如何在NotSupportedTypes中检查只有类型为MyEnum的枚举?

var model = new MyClass();

//good
model.NotSupportedTypes = new Enum[] { MyEnum.a }

//bad
model.NotSupportedTypes = new Enum[] { SomeOtherEnum.a }

2 个答案:

答案 0 :(得分:1)

您可以在属性中进行检查,例如使用Array.TrueForAll

private Enum[] _NotSupportedTypes;
public Enum[] NotSupportedTypes
{
    get { return _NotSupportedTypes; }
    set {
        if (!Array.TrueForAll(value, x => x.GetType() == typeof(MyEnum)))
            throw new ArgumentException("All enums must be MyEnum");
        _NotSupportedTypes = value; 
    }
}

正如Xanatos所提到的,这不会保护您免受阵列变化的影响。因此,您可以稍后使用不同的枚举类型替换其中的一个MyEnum。数组不是只读的。

那么为什么不首先使用MyEnum[]

答案 1 :(得分:0)

e.preventDefault();