Подтвердить что ты не робот

С#: как выполнить нулевую проверку динамического объекта

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

Псевдокод:

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
}
4b9b3361

Ответ 1

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

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

Ответ 2

Вы всегда можете просто создать параметр типа объекта, что делает компилятор. Когда вы вводите динамический параметр, это просто означает, что внутри этого метода используется только динамический вызов для всех видов использования 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
}