2

我正在用 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 不能转换为字符串”。)或修复阅读?

谢谢。

4

2 回答 2

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
}
于 2012-11-26T21:45:35.940 回答
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);
于 2012-11-26T21:39:57.750 回答