This question already has an answer here:
Enum.TryParse returns true for any numeric values
                                
                                    (1个答案)
                                
                        
                                4年前关闭。
            
                    
我有以下枚举(从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上运行。

最佳答案

Enum.TryParse<TEnum>(string value, ...)MSDN page中:


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

07-24 09:37