С#: как выполнить нулевую проверку динамического объекта
Как выполнить проверку 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
}
Ответы
Ответ 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
}