gpt4 book ai didi

c# - 使用 Enum.Parse() 时出现意外结果

转载 作者:行者123 更新时间:2023-11-30 13:29:33 28 4
gpt4 key购买 nike

class Program
{
static void Main(string[] args)
{
String value = "Two";
Type enumType = typeof(Numbers);
Numbers number = (Numbers)Enum.Parse(enumType, value);
Console.WriteLine(Enum.Parse(enumType, value));
}

public enum Numbers : int
{
One,
Two,
Three,
Four,
FirstValue = 1
}
}

这是我在应用程序中使用的枚举的简化版本。某些枚举名称没有值的原因是因为我使用它们的名称作为参数执行 Enum.Parse,而具有值的名称是从 int 解析的。

如果您单步执行上面的代码并调查“number”变量,您会发现它实际上是“Two”,但控制台中的输出是“FirstValue”。在这一点上我不明白为什么,你呢?

好的,解决方案很简单——只需给无值的枚举赋值即可。但我还是很好奇。

最佳答案

我怀疑FirstValueTwo的内部值都是1,所以系统不知道输出哪个字符串。

public enum Numbers : int
{
One, // defaults to 0
Two, // defaults to 1
Three, // defaults to 2
Four, // defaults to 3
FirstValue = 1 // forced to 1
}

每个枚举值都有一个唯一的整数值,但并不是每个整数值都有一个唯一的枚举值。

当您解析 “two” 时,它会在内部存储为整数 1。然后,当您尝试将其转换回字符串时,根据用于查找该名称的技术,您可能会得到 "Two""FirstValue"。如您所述,解决方案是为每个枚举值指定一个定义的整数值。

关于c# - 使用 Enum.Parse() 时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/530281/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com