web-dev-qa-db-ja.com

C#:動的オブジェクトでnullチェックを実行する方法

動的オブジェクトでnull-checkを実行するにはどうすればよいですか?

疑似コード:

public void Main() {
    dynamic dynamicObject = 33;
    if(true) { // Arbitrary logic
        dynamicObject = null;
    }
    Method(dynamicObject);
}

public void Method(dynamic param) {
    // TODO: check if the content of 'param' is equal to null
}
26
Seb Nilsson

動的オブジェクトにnullの解釈方法を変更するカスタム等価演算子が含まれる可能性を心配していますか?その場合は、Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) {
  .......
}
34
JaredPar

タイプオブジェクトのパラメーターをいつでも作成できます。これがコンパイラーが行っていることです。パラメータを動的に入力すると、それはそのメソッド内でのみ、paramのすべての使用に対して動的呼び出しを使用していることを意味しますが、外部では、タイプオブジェクトの単なるシグネチャです。 dynamicObjectのより強力な使用法は、呼び出すメソッドのオーバーロードを持つことです。そのため、例を同じに保ち、2つのオーバーロードがある場合、ランタイムタイプに基づいて2つのメソッドの1つを呼び出します。さらにタイプを追加します。

public void Main() {
    dynamic dynamicObject = 33;
    if(true) { // Arbitrary logic
        dynamicObject = null;
    }
    Method(dynamicObject);
}
public void Method(int param) {
  //don't have to check check null
  //only called if dynamicObject is an int
}
public void Method(object param) {
// will be called if dynamicObject is not an int or null
}
0
jbtule

速い方法は:

if (_owner is null)
{

}
0
tedebus

あなたはシンプルさを使うことができます:

var s = data.servicePhoneNumber is null ? "" : data.servicePhoneNumber.Value;
0