如何检测传递给 Enum[] 的枚举类型
How to detect enum type passed to Enum[]
在我的 MVC 项目中我有 MyEnum:
public enum MyEnum
{
a,
b,
c,
d
}
我也有class:
public class MyClass
{
public MyEnum SelectType { get; set; }
public Enum[] NotSupportedTypes{ get; set; }
}
在我的 class for NotSupportedTypes
中,我只能使用 Enum[]
类型。
当我创建 class MyClass
的对象时,如何检查 NotSupportedTypes
中是否仅推送 MyEnum
类型的枚举?
var model = new MyClass();
//good
model.NotSupportedTypes = new Enum[] { MyEnum.a }
//bad
model.NotSupportedTypes = new Enum[] { SomeOtherEnum.a }
var model = new MyClass();
//good
//model.NotSupportedTypes = new Enum[] { MyEnum.a }
//bad
model.NotSupportedTypes = new Enum[] { SomeOtherEnum.a }
var validTypes = model.NotSupportedTypes.All(n => n.GetType() == typeof(MyEnum));
您可以在 属性 中检查它,例如 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[]
?
在我的 MVC 项目中我有 MyEnum:
public enum MyEnum
{
a,
b,
c,
d
}
我也有class:
public class MyClass
{
public MyEnum SelectType { get; set; }
public Enum[] NotSupportedTypes{ get; set; }
}
在我的 class for NotSupportedTypes
中,我只能使用 Enum[]
类型。
当我创建 class MyClass
的对象时,如何检查 NotSupportedTypes
中是否仅推送 MyEnum
类型的枚举?
var model = new MyClass();
//good
model.NotSupportedTypes = new Enum[] { MyEnum.a }
//bad
model.NotSupportedTypes = new Enum[] { SomeOtherEnum.a }
var model = new MyClass();
//good
//model.NotSupportedTypes = new Enum[] { MyEnum.a }
//bad
model.NotSupportedTypes = new Enum[] { SomeOtherEnum.a }
var validTypes = model.NotSupportedTypes.All(n => n.GetType() == typeof(MyEnum));
您可以在 属性 中检查它,例如 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[]
?