C #: Как выполнить нулевую проверку на динамическом объекте - PullRequest
24 голосов
/ 11 августа 2011

Как выполнить нулевую проверку для динамического объекта?

Псевдокод:

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
}

Ответы [ 4 ]

33 голосов
/ 11 августа 2011

Вас беспокоит возможность того, что динамический объект будет иметь пользовательский оператор равенства, который изменит способ интерпретации null? Если это так, просто используйте Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) {
  .......
}
0 голосов
/ 02 апреля 2019

Быстрый путь может быть:

if (_owner is null)
{

}
0 голосов
/ 01 ноября 2018

Вы можете использовать простоту:

var s = data.servicePhoneNumber is null ? "" : data.servicePhoneNumber.Value;
0 голосов
/ 11 августа 2011

Вы всегда можете просто указать параметр типа object, это то, что делает компилятор. Когда вы вводите параметр dynamic, это просто означает, что в этом методе используется только динамический вызов для всех применений param, но снаружи это просто сигнатура объекта типа. Более динамичное использование вашего dynamicObject состояло бы в том, чтобы иметь перегрузки метода, который вы вызываете, поэтому, если вы оставите свой пример таким же и просто имеете две перегрузки, он вызовет один из двух методов, основанных на типе времени выполнения, и вы всегда добавить больше для большего количества типов.

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
}
...