C# 尝试分析无效值时,Enum.ToObject返回默认值
我正在尝试使用enum.ToObject方法从值解析到enum。但是,当我与无效参数一起使用时,它似乎总是返回默认值,例如0C# 尝试分析无效值时,Enum.ToObject返回默认值,c#,C#,我正在尝试使用enum.ToObject方法从值解析到enum。但是,当我与无效参数一起使用时,它似乎总是返回默认值,例如0 [TestMethod] public void ShouldFail() { byte testValue = 68; TestEnum testEnumObject = (TestEnum)Enum.ToObject(typeof(TestEnum), testValue); //how tes
[TestMethod]
public void ShouldFail()
{
byte testValue = 68;
TestEnum testEnumObject = (TestEnum)Enum.ToObject(typeof(TestEnum), testValue);
//how testEnumObject is 68? dosent make sence.
Assert.AreEqual(testEnumObject, TestEnum.A);
}
public enum TestEnum : byte
{
A = 1,
B = 2,
C = 3
}
如果无法使用enum分配值以抛出expetion,我如何生成函数?//使用系统;
//using System;
//using System.Linq;
if (!Enum.GetValues(typeof(TestEnum)).Cast<byte>().Contains(testValue))
{
throw new InvalidCastException();
}
//使用System.Linq;
如果(!Enum.GetValues(typeof(TestEnum)).Cast()包含(testValue))
{
抛出新的InvalidCastException();
}
将指定的整数值转换为枚举成员
ToObject(Type,Int16)
方法将值转换为枚举
基础值为value的成员请注意,转换
即使值超出enumType成员的边界,也会成功。到
确保该值是枚举类型的有效基础值
枚举,将其传递给IsDefined
方法
这说明了一切,让我们看看定义的
返回一个布尔值,指示给定的整数值或其名称
作为字符串存在于指定的枚举中
到目前为止听起来不错
用法
if(!Enum.IsDefined(typeof(YourLevelyEnum), 4)
{
throw InvalidOperationException("OMG! Not.. even.. valid..");
}
如果(!Enum.IsDefined(typeof(TestEnum),testValue)){throw new Exception()}
为什么不将其作为答案发布?从技术上讲,TestEnum只是一个字节。从0到255的所有值都是“有效”的,其中只有三个恰好有名称。这是一个可以争论的设计决策,但事实就是如此。如果值超出范围,则该方法被指定为成功。From():请注意,即使值超出enumType成员的边界,转换也会成功。要确保该值是enumType枚举的有效基础值,请将其传递给IsDefined方法。