当我尝试解析无效值时,Enum.ToObject返回默认值

时间:2018-12-24 05:21:42

标签: c#

我正在尝试使用Enum.ToObject方法将值解析为枚举。但是,当我使用无效参数时,似乎总是返回默认值,例如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
    }

如果不能用枚举赋值以引起异常,该如何使函数起作用?

2 个答案:

答案 0 :(得分:1)

Enum.ToObject Method

  

将指定的整数值转换为枚举成员。

     

ToObject(Type, Int16)方法将值转换为枚举   其潜在价值是价值的成员。 请注意,转化   即使value超出enumType成员的范围,也会成功。至   确保该值是enumType的有效基础值   枚举,将其传递给IsDefined方法

这说明了一切,让我们来看一下已定义的

Enum.IsDefined(Type, Object) Method

  

返回一个布尔值,该布尔值指示给定的整数值或其名称   作为字符串,存在于指定的枚举中。

到目前为止听起来不错!

用法

if(!Enum.IsDefined(typeof(YourLevelyEnum), 4)
{
    throw InvalidOperationException("OMG! Not.. even.. valid..");
}

答案 1 :(得分:0)

//using System;
//using System.Linq;
if (!Enum.GetValues(typeof(TestEnum)).Cast<byte>().Contains(testValue))
{
    throw new InvalidCastException();
}