web-dev-qa-db-ja.com

C#NOT NOT NULLの場合は、値を割り当てる

C#には、次のコードを削減するようにC#にはあります。

var testVar1 = checkObject();
if (testVar1 != null)
{
      testVar2 = testVar1;
}
 _

この状況では、TestVar1がCheckObject()結果からNULLの場合にのみTESTVAR2を割り当てたいだけです(TestVar2はコードを発射する設定値を持ちます)。 Null Coalesce Stuffを使用できるが実際にはワークアウトしないように考えようとしていました。

このTestVar2に追加すると、Fire TestVar2のコードが設定されているので、testVar2がnullの場合は何も設定したくない。

    public MyObj testVar2
    {
        get { return _testVar2; }
        set
        {
            _testVar2 = value;
            RunSomeCode();                
        }
    }
 _
6
Matt

testVar2に設定されているときにイベントが発生したセッターがあります。 testVar2がそれ自体に設定されていることを確認していない場合、イベントはNULL合体演算子(または三項演算子)を使用して発砲します。

testVar2を設定していることを確認する必要があると思います。

    public MyObj testVar2
    {
        get { return _testVar2; }
        set
        {
            if (_testVar2 != value)
            {
               _testVar2 = value;
               RunSomeCode();
            }                
        }
    }

私はこれが私の意見であると考えていますしかし、私はそれをどのように持っているかを残します。私はそれが短い手よりも優れた意図を伝えていると思います。

testVar2 = testVar1 ?? tesrVar2は、「testVar2testVar1に設定します.testVar1がnullの場合を除き、testVar2testVar2に設定します。

if (testVar1 != null)
{
   testVar2 = testVar1;
}

testVar1がnullでない場合は、testVar2testVar1に設定してください。

0
Joshua Robinson

TestVar2をnullに設定できるようにしたくない場合は、設定自体のnullを確認するのが理にかなっています。それ以外の場合は、設定しようとしたときはいつでもnullを確認することを忘れないでください。

C#標準に準拠するためにケーシングを修正したことに注意してください。

_private MyObj testVar2;

public MyObj TestVar2
{
    get { return testVar2; }
    set
    {
        if (value == null) return;      // Or throw an ArgumentNullException
        if (testVar2 == value) return;  // No need to RunSomeCode if the value isn't changing

        testVar2 = value;
        RunSomeCode();                
    }
}
_

現在、懸念がまだnullをチェックするのであれば(たとえば、null値の場合は例外をスローすることにした場合)、問題がない場合は何もないあなたの元のコードを使って(三成分/ヌル合体のソリューションは、どういうわけか "無駄になるようです)それは彼らがそれ自身に何かを設定するかもしれないという点で、あなたは1行でそれをすることができます:

_if (testVar1 != null) SomeClass.TestVar2 = testVar1;
_

ただし、CheckObject()への呼び出しの結果をキャプチャするために_testVar1_のみを作成している場合は、ヌル合体演算子が必要ないため、もう少し意味があります。値を格納するための変数を作成します。

_SomeClass.TestVar2 = CheckObject() ?? SomeClass.TestVar2;
_
0
Rufus L