C#

(a == 1 && a == 2 && a == 3) を常に真にする C#編 ~プロパティのgetterに副作用を持たせてはいけない。~

ちょっとこれ見てやってみた

https://qiita.com/Morichan/items/4894d7d92ecab7a3afd8

C#はプロパティというものがあるので簡単に実装できます。

class Program
{
    private static int value = 1;

    public static int Value
    {
        get { return value++; }
    }

    static void Main(string[] args)
    {
        //ここ
        if (Value == 1 && Value == 2 && Value == 3)
        {
            Console.WriteLine("true");
        }
    }
}


と こ ろ で

このコードですね。
評価値をfalseにする方法があります。
それは上記コードの「ここ」の部分にVisualStudioでブレークポイントを張って、Valueの中身を見ること!
そうすると、getterが呼ばれるのでValueの値がずれてfalseで評価されます。
これ、昔踏んでバグらせました。

vserror.png

結論

プロパティのgetterに副作用持たせるなよ
絶対だぞ絶対:triumph: