问题描述
|
基本上,由于某种原因,我没有收到正确的枚举类型,也无法弄清楚为什么,我的代码在下面,非常感谢任何指针/解释...
编辑:类型->更改为另一个名称(感谢大家的注意)
帮手:
public static T Convert<T>(this string str)
{
return (T)Enum.Parse(typeof(T),str,true);
}
枚举值:
public enum anothername
{
SmallText = 100,Number = 15,TextArea = 0,Bool = 0,Choices = 0,}
我的测试:
[Test]
public void EnumGetStringFromEnumType()
{
//arrange
var MaxLength = EnumHelper.Convert<anothername>(\"TextArea\").ToString();
//act
//assert
Assert.AreEqual(\"TextArea\",MaxLength);
}
编辑:
谢谢,删除int值解决了!
但是...如果我实际上想对某些枚举类型而不是其他枚举类型说值
public enum anothername
{
SmallText = 100,TextArea,Bool,Choices,}
测试2:
[Test]
public void EnumGetIntValueOrStringFromEnumType()
{
//arrange
var MaxLength = EnumHelper.ToEnumSafe<anothername>(\"TextArea\");
//act
//assert
Assert.AreEqual(null,(int)MaxLength);
}
当我尝试检索int值时遇到完全相同的问题,但得到的结果不正确...
结果= 16
解决方法
枚举具有与
TextArea
(Bool
和Choices
)相同的基础值的重复成员。尽管解析应该成功,但是未定义所得枚举实例上的ToString
的值,并且可能不等于断言所期望的\“ TextArea \”。
来自
Enum.ToString
文档:
如果有多个枚举成员
相同的基础价值
尝试检索字符串
枚举的表示
成员的名称基于其基础
值,您的代码不应
关于哪个名字的假设
方法将返回。
编辑:
为了响应您的编辑,请尝试以下断言:
var MaxLength = EnumHelper.ToEnumSafe<anothername>(\"TextArea\");
Assert.AreEqual(anotherName.TextArea,MaxLength);
或者,如果您希望比较基础类型:
Assert.AreEqual((int)anotherName.TextArea,(int)MaxLength);
如果未明确指定枚举成员的值,您似乎会觉得该枚举成员未与基础值关联。不是这种情况;枚举的所有成员都与基础值相关联。 “隐式”关联的规则由(根据语言规范)给出:
•如果枚举成员是第一个枚举
以枚举类型声明的成员,其
关联值为零。
• 除此以外,
枚举的关联值
成员是通过增加
文本上的关联价值
枚举成员之前的成员。这个
增加的价值必须在
可以是
由基础类型表示,
否则会发生编译时错误。