【问题标题】:TryParse of Enum is working, but I think it shouldn't [duplicate]枚举的 TryParse 正在工作,但我认为它不应该 [重复]
【发布时间】:2015-02-09 10:40:18
【问题描述】:

我有以下枚举(从 xsd 生成):

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.ebutilities.at/invoice/02p00")]
[System.Xml.Serialization.XmlRootAttribute("Sector", Namespace = "http://www.ebutilities.at/invoice/02p00", IsNullable = false)]public enum    
SectorType
{
    [System.Xml.Serialization.XmlEnumAttribute("01")]
    Item01,
    [System.Xml.Serialization.XmlEnumAttribute("02")]
    Item02,
    [System.Xml.Serialization.XmlEnumAttribute("03")]
    Item03,
    [System.Xml.Serialization.XmlEnumAttribute("04")]
    Item04,
    [System.Xml.Serialization.XmlEnumAttribute("05")]
    Item05,
    [System.Xml.Serialization.XmlEnumAttribute("06")]
    Item06,
    [System.Xml.Serialization.XmlEnumAttribute("07")]
    Item07,
    [System.Xml.Serialization.XmlEnumAttribute("08")]
    Item08,
    [System.Xml.Serialization.XmlEnumAttribute("09")]
    Item09,
    [System.Xml.Serialization.XmlEnumAttribute("99")]
    Item99,
}

所以我想将一个字符串解析为 SectorType:

string s = "88";
SectorType sectorType;
bool result = Enum.TryParse(s, out sectorType);

在这之后我的sectorType 是“88”,结果是true。所以转换成功。这也很好用:

SectorType sectorType = (SectorType)Enum.Parse(typeof (SectorType), "88")

sectorType 的值为 88

这是来自调试器的图片:

MSDN 提供以下信息:

Enum.TryParse 方法

将一个或多个枚举常量的名称或数值的字符串表示形式转换为等效的枚举对象。返回值表示转换是否成功。

显然没有等效的枚举对象(88(或任何数字)!= Item01,..., Item09, Item99)。

我在想枚举是强类型的(请参阅dotnetperls/enums)。 它说:

我们看到枚举是强类型的。您不能将它们分配给任何值。

但很明显,在我的示例中,我可以为我的 SectorType-Enum 分配任何数字,但我真的不知道为什么会这样......

.NET Fiddle查看它的运行情况。

【问题讨论】:

  • 另请注意,您的 XML 整数值将不同于您的 .NET 整数值。 Enum.TryParse 仅适用于后者。
  • 有人可以重新打开这个问题吗?我不认为stackoverflow.com/questions/6741649/… 与这个问题相同。这种枚举情况很特殊,因为枚举值不能以数字开头。

标签: c# parsing enums tryparse


【解决方案1】:

MSDN pageEnum.TryParse<TEnum>(string value, ...)

如果 value 是一个整数的字符串表示,不代表 TEnum 枚举的基础值,则该方法返回一个枚举成员,其基础值为转换为整数类型的值。如果不希望出现这种行为,请调用 IsDefined 方法以确保整数的特定字符串表示实际上是 TEnum 的成员。

【讨论】:

  • 这正是我错过的......
  • 是的,它不直观。 “强类型”哲学显然不适用于.Parse()
猜你喜欢
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2012-08-31
  • 2017-06-07
相关资源
最近更新 更多