2

XmlWriterを使用して列挙値を記述していますが、xmlでは次のようになります。

<Tile>Plain</Tile>

writer.WriteValue(tile.ID.ToString()); // ID's type is the enum

プレーンは列挙値の1つです。これを読み込もうとすると、うまくいきませんが。

(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 に答える