考虑以下示例,我尝试覆盖枚举值,以便能够使用大写字母解析枚举:
public enum Language
{
Heb,
Eng,
heb = Heb,
eng = Eng
}
class Program
{
static void Main(string[] args)
{
var e = "heb";
Language result;
Enum.TryParse(e, out result);
Console.WriteLine(result);
Console.WriteLine(result.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子返回:"Heb""Heb"
另一方面这个例子:
public enum Language
{
Heb,
Eng,
heb = Heb,
eng = Eng,
None
}
class Program
{
static void Main(string[] args)
{
var e = "heb";
Language result;
Enum.TryParse(e, out result);
Console.WriteLine(result);
Console.WriteLine(result.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
返回"heb""heb"
有什么想法吗?
小智 6
当两个枚举值具有相同的表示时,不能保证使用哪个Enum.ToString.您可以将测试缩短到恰好Console.WriteLine(Language.Heb);.由于这两个Heb和heb有效的输出,也不能保证你会得到哪一个.引用Enum.ToString:
来电者须知
如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式,则您的代码不应对该方法将返回的名称做出任何假设.例如,以下枚举定义了两个具有相同基础值的成员Shade.Gray和Shade.Grey.
Run Code Online (Sandbox Code Playgroud)enum Shade { White = 0, Gray = 1, Grey = 1, Black = 2 }以下方法调用尝试检索其底层值为1的Shade枚举成员的名称.该方法可以返回"Gray"或"Gray",并且您的代码不应对将返回哪个字符串做出任何假设.
Run Code Online (Sandbox Code Playgroud)string shadeName = ((Shade) 1).ToString("F");