■
クラスMyClassにおいて変数flagの値がfalseでなければならない場面でtrueになっていた。
変数flagに値が代入されている箇所を全て確認したが異常なし。
そこでこうした。
bool flag_ = false; private bool flag { get { return flag_; } set { if(value) { Console::WriteLine("true"); // (A) } else { Console::WirteLine("false"); // (B) } flag_ = value; } }
(A)と(B)にブレークポイントを仕掛けた。
それなのにブレークしないまま問題の箇所で変数flag_はtrueになっていた。
原因は何か?
ヒント: C#の言語仕様だけではなく.NET Framework全体を含めた問題です。
答え.
public void Save(string fileName) { ... BinaryFormatter bf = new BinaryFormatter(); using(FileStream fs = new FileStream(fileName, FileMode.Create)) { bf.Serialize(fs, this); } ... } public static MyClass Load(string fileName) { ... MyClass result; BinaryFormatter bf = new BinaryFormatter(); using(FileStream fs = new FileStream(fileName, FileMode.Open)) { result = (MyClass)bf.Deserialize(fs); } ... }
まぁ答えとしては反則臭いですけど。
むやみに使うと死ねる。むしろ死んだ。