ゲームプレイ中にWindowsPhone7ゲームが破壊された場合、必要な要素をシリアル化して、ゲームに戻ったときに保存されたデータを逆シリアル化し、ユーザーが中断したところから続行できるようにします。質問のリスト(questionList)とボードピースのリスト(boardPieces)があります。これらは両方とも、私のゲームから離れるときにシリアル化/逆シリアル化され、すべて正常に機能しているようです。質問に答えると、その質問はリストから削除されます。
questionList.Remove(boardPiece.Question);
これは、ゲームをトゥームストーンしてそこに戻るまで(リストがシリアル化/逆シリアル化された後)、問題なく機能します。次に、questionList.Remove...が正しく機能しません。ブレークポイントを介してデータを確認しましたが、questionListには一致するアイテムがあるように見えますが、Listを介してデータを削除しようとしています。削除はサイレントに失敗し、アイテムは削除されません。
回避策を見つけたのは、questionListをループし、一致するboardPieceを検索してから、単にRemoveを使用するのではなく、インデックス(RemoveAt)を介して削除することです。質問はせいぜい16個しかないので、パフォーマンスへの影響はあまりないようですが、データを逆シリアル化した後にRemoveが失敗する理由を知りたいので、少なくとも何かを学びます。ハッシュか何かが一致していませんか?何も思いつきません... :(
これがquestionListをシリアル化する方法です(boardPiecesでも同じように機能します):
XmlSerializer questionListSerializer = new XmlSerializer(typeof(QuestionHelper));
writer.WriteStartElement("QuestionList");
writer.WriteAttributeString("Count", questionList.Count.ToString());
foreach (QuestionHelper question in questionList)
questionListSerializer.Serialize(writer, question);
writer.WriteEndElement();
そして、これがどのように逆シリアル化されるかです(boardPiecesについても同じ考えです):
XmlSerializer questionListSerializer = new XmlSerializer(typeof(QuestionHelper));
int questionListCount = int.Parse(reader.GetAttribute("Count"));
reader.Read();
for (int i = 0; i < questionListCount; i++)
questionList.Add(questionListSerializer.Deserialize(reader) as QuestionHelper);
if (questionListCount > 0)
reader.Read();