15
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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:

15
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?