我想限制用户使用任何enumvalue.如果用户尝试分配两个以上的值,我必须抛出一个错误.
public enum Fruits
{
Apple,
Orange,
Grapes
}
public Fruits Fruits
{
get
{
return m_fruits;
}
set
{
m_fruits=value;
}
}
Fruits = Fruits.Apple & Fruits.Grapes; //I need to avoid such type of assignment
Run Code Online (Sandbox Code Playgroud)
任何人都可以说如何检查这种类型的验证.
谢谢,Lokesh
您可以使用Enum.IsDefined
查看是否为枚举实际定义了整数值.为了能够检测到没有使用过的逻辑操作Fruits.Apple | Fruits.Grapes
,请确保您的枚举值是标志.
public enum Fruits
{
Apple = 1,
Orange = 2,
Grapes = 4
}
public Fruits Fruit
{
get
{
return m_fruits;
}
set
{
if (!Enum.IsDefined(typeof(Fruits), value))
{
throw new ArgumentException();
}
m_fruits = value;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
没有反射的更快的方法是自己检查所有枚举值:
public Fruits Fruit
{
get
{
return m_fruits;
}
set
{
switch (value)
{
case Fruits.Apple:
case Fruits.Grapes:
case Fruits.Orange:
m_fruits = value;
break;
default:
throw new ArgumentException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该Enum.IsDefined()
方法检查值是否是有效的枚举值:
Fruits f1 = Fruits.Orange;
Fruits f2 = (Fruits)77;
var b1 = Enum.IsDefined(typeof(Fruits), f1); // => true
var b2 = Enum.IsDefined(typeof(Fruits), f2); // => false
Run Code Online (Sandbox Code Playgroud)
顺便说一句:您的示例似乎不正确:var f = Fruits.Apple&Fruits.Grapes
将分配Fruits.Apple
给f
.这是因为Apple(== 0)和Grapes(== 2)的按位AND将导致0(仍然是有效的枚举值 - > Apple).
如果你的意思是var f = Fruits.Orange|Fruits.Grapes
,那么f现在将是3(1和2的按位OR),Enum.IsDefined
现在将返回false.
归档时间: |
|
查看次数: |
5570 次 |
最近记录: |