c#中的枚举助手没有给出预期的结果

Har*_*oon 2 c# enums .net-3.5

基本上我没有收到正确的枚举类型由于某种原因我无法弄清楚为什么,我的代码在下面,非常感谢任何指针/解释...

编辑:键入 - >更改为anothername(感谢高手们)

帮手:

 public static T Convert<T>(this string str)
    {
        return (T)Enum.Parse(typeof(T), str, true);
    }
Run Code Online (Sandbox Code Playgroud)

枚举值:

public enum anothername
    {
        SmallText = 100,
        Number = 15,
        TextArea = 0,
        Bool = 0,
        Choices = 0,
    }
Run Code Online (Sandbox Code Playgroud)

我的测试:

 [Test]
        public void EnumGetStringFromEnumType()
        {
            //arrange
            var MaxLength = EnumHelper.Convert<anothername>("TextArea").ToString();

            //act

            //assert
            Assert.AreEqual("TextArea", MaxLength);


        }
Run Code Online (Sandbox Code Playgroud)

编辑:

谢谢,删除int值解决了它!

但是......如果我真的想要为某些枚举类型而不是其他类型说出值,该怎么办?

public enum anothername
    {
        SmallText = 100,
        Number = 15,
        TextArea,
        Bool,
        Choices,
    }
Run Code Online (Sandbox Code Playgroud)

测试2:

[Test]
        public void EnumGetIntValueOrStringFromEnumType()
        {
            //arrange
            var MaxLength = EnumHelper.ToEnumSafe<anothername>("TextArea");

            //act

            //assert
            Assert.AreEqual(null, (int)MaxLength);

        }
Run Code Online (Sandbox Code Playgroud)

当我尝试检索int值时,我遇到完全相同的问题,结果不正确...结果= 16

Ani*_*Ani 7

枚举具有与TextArea(BoolChoices)具有相同基础值的重复成员.尽管解析应该成功,但是ToString未定义结果枚举实例的值,并且可能不等于断言所期望的"TextArea".

Enum.ToString文档:

如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回的名称做出任何假设.

编辑:

为了回应您的编辑,请尝试以下断言:

var MaxLength = EnumHelper.ToEnumSafe<anothername>("TextArea");
Assert.AreEqual(anotherName.TextArea, MaxLength);
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢比较基础类型:

Assert.AreEqual((int)anotherName.TextArea, (int)MaxLength);
Run Code Online (Sandbox Code Playgroud)

如果枚举成员的值未明确指定,则表明您认为枚举成员未与基础值关联.不是这种情况; 枚举的所有成员都与基础值相关联."隐式"关联的规则由(来自语言规范)给出:

•如果枚举成员是枚举类型中声明的第一个枚举成员,则其关联值为零.

•否则,通过将文本上在前的枚举成员的关联值增加1来获得枚举成员的关联值.此增加的值必须在可由基础类型表示的值范围内,否则会发生编译时错误.