Enum的TryParse正在运行,但我认为不应该

时间:2015-02-09 10:40:18

标签: c# parsing enums tryparse

我有以下枚举(由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

以下是调试器的图片:

enter image description here

MSDN提供以下信息:

  

Enum.TryParse方法

     

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

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

我认为枚举是强类型的(见dotnetperls/enums)。 它说:

  

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

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

看到它在.NET Fiddle运行。

1 个答案:

答案 0 :(得分:2)

来自Enum.TryParse<TEnum>(string value, ...)的{​​{3}}:

  

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