我的enum类看起来像这样:
public enum StupidEnum
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("01")]
Item01,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("01_1")]
Item01_1,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("01_11")]
Item01_11,
}
现在我想通过仅给出01_11值来获得Item01_11枚举对象。 换句话说,我有来自Xml Enum Attribute的值,因此我需要返回枚举对象。
答案 0 :(得分:1)
我已经成功实现了它,但它并不是一个非常优雅的解决方案。由于您的属性依赖于XML序列化,因此您需要以这种方式阅读它。我将发布工作代码以及我推荐的方式。
var testString = "01_1";
var xml = new XmlSerializer(typeof(StupidEnum));
// XmlSerializer expects XML so wrap what you got in xml tags.
using(var ms = new MemoryStream(Encoding.ASCII.GetBytes($"<StupidEnum>{testString}</StupidEnum>")))
var item = (StupidEnum)xml.Deserialize(ms);
Console.WriteLine(item);
}
或者,您可以将enum
转换为整数类型并存储该数字,然后在读取时使用枚举自身的能力来回转到enum
,而不是依赖于xml序列化值如下:
var testString = "Item01_1";
// you can also just get the 01_1 and concatenate it to "Item" when parsing in the next line
var value = Enum.Parse(typeof(StupidEnum), testString);
Console.WriteLine(value);