XNA 画面を使用する Windows フォーム アプリケーションで問題が発生しました。複数行のコードを完了した後、オブジェクトに変更が加えられたかどうかを確認したいと考えています。その場合、タイトルに * を追加して、ファイルが変更されたが保存されていないことをユーザーに通知する必要があります。
そのために、オブジェクトをコピーし、それらの行の後でそれらが等しいかどうかを確認します。
MapSquare afterChange = TileMap.GetMapSquareAtPixel((int)mouseLoc.X,(int)mouseLoc.Y);
MapSquare beforeChange = (MapSquare)afterChange.Clone();
// code.....
if (!Object.Equals(beforeChange,afterChange))
parentForm.MapChanged = true; // this happens even when no changes happend
この間違いは、Iclonable インターフェイスで使用した Clone メソッドにあるに違いありません。コピーした直後に equals をチェックしても機能しないからです。
public object Clone()
{
return new MapSquare(this);
}
private MapSquare(MapSquare squere)
{
this.LayerTiles = (int[])squere.LayerTiles.Clone();
this.CodeValue = squere.CodeValue;
this.Behavior = squere.Behavior;
}
間違いは何ですか?layertiles 配列にあると思いますが、すでにいろいろ試しているので、どうすればいいのかわかりません。それとも、私の問題を解決するもっと簡単な方法がありますか?