C# 尝试分析无效值时,Enum.ToObject返回默认值

C# 尝试分析无效值时,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

我正在尝试使用enum.ToObject方法从值解析到enum。但是,当我与无效参数一起使用时,它似乎总是返回默认值,例如0

    [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方法。