我正在使用XmlWriter编写枚举值,它在xml中看起来像这样:
<Tile>Plain</Tile>
writer.WriteValue(tile.ID.ToString()); // ID's type is the enum
普通是枚举值之一。现在,当我尝试阅读本文时,虽然它不起作用。
(TileID)reader.ReadElementContentAs(typeof(TileID), null);
当我的reader.Name ==“Tile”,我应该这样做,虽然它显然无法将字符串转换为我的枚举。是否有任何方法可以修复写入,所以我不必执行.ToString()(因为如果我不这样做,我会收到错误:“TileID不能转换为字符串”。)或修复读数?
感谢。
答案 0 :(得分:4)
我建议使用Enum.TryParse
var enumStr = reader.ReadString();
TitleID id;
if (!Enum.TryParse<TitleID>(enumStr, out id)
{
// whatever you need to do when the XML isn't in the expected format
// such as throwing an exception or setting the ID to a default value
}
答案 1 :(得分:3)
您可能必须使用Enum.Parse
。我最近把它扔到了一个工作项目中:
public static T ParseTo<T>(string value) {
return (T)Enum.Parse(typeof(T), value);
}
它只是使铸件更清洁。我不需要任何错误检查,因为我们有非常严格的XML生成测试..你可能想添加一些。
用法:
var idString = reader.ReadString();
TileID tileId = StaticClassYouPutItIn.ParseTo<TileID>(idString);