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();
}
}
_
testVar2
に設定されているときにイベントが発生したセッターがあります。 testVar2
がそれ自体に設定されていることを確認していない場合、イベントはNULL合体演算子(または三項演算子)を使用して発砲します。
testVar2
を設定していることを確認する必要があると思います。
public MyObj testVar2
{
get { return _testVar2; }
set
{
if (_testVar2 != value)
{
_testVar2 = value;
RunSomeCode();
}
}
}
私はこれが私の意見であると考えていますしかし、私はそれをどのように持っているかを残します。私はそれが短い手よりも優れた意図を伝えていると思います。
testVar2 = testVar1 ?? tesrVar2
は、「testVar2
をtestVar1
に設定します.testVar1
がnullの場合を除き、testVar2
をtestVar2
に設定します。
if (testVar1 != null)
{
testVar2 = testVar1;
}
「testVar1
がnullでない場合は、testVar2
をtestVar1
に設定してください。
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;
_