我有以下几个理由:
public enum FirstEnum : short
{
Unknown = -1,
Red = 2,
Green = 3
}
public enum SecondEnum
{
Unknown = -1,
Orange = 2,
Apple = 3
}现在,我想编写一个数据注释属性,以便验证属性。所以说我有个课:
public class MyClass
{
[EnumValidation(AllowUnKnown = true)]
public FirstEnum First { get; set; }
[EnumValidation(AllowUnKnown = false)]
public SecondEnum Second { get; set; }
}我的验证属性如下:
public class EnumValidationAttribute : ValidationAttribute
{
public bool AllowUnKnown { get; set; }
public override bool IsValid(object aValue)
{
bool valid = true;
int enumValue = (int) aValue; //** Cannot do hard cast
if (enumValue == -1 && !AllowUnKnown)
valid = false;
return valid;
}
}所以现在他的问题来了,因为FirstEnum是一个短的,所以我不能再对int做一个enum成员的硬转换。
那么如何安全地确定enum成员的值呢?(我不能更改FirstEnum的声明)
发布于 2016-01-28 02:26:40
这是否有效:
int enumValue = Convert.ToInt32(b); 发布于 2016-01-27 06:15:56
首先,不能对-1变量使用byte值,然后应该将Unknown值更改为任何其他有效的byte。FirstEnum是不可编译的。
此外,还可以使用Convert.ToInt32方法将字节值转换为整数。实际上,下一段代码将true写到控制台:
byte x1 = 1;
object o1 = x1;
Console.WriteLine(Convert.ToInt32(o1) == 1);因此您可以通过转换实现您的方法:
public override bool IsValid(object aValue)
{
int enumValue = Convert.ToInt32(aValue);
return !(enumValue == -1 && !AllowUnKnown);
}https://stackoverflow.com/questions/35029891
复制相似问题