29

如何对动态对象执行空检查?

伪代码:

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

4 回答 4

42

您是否担心动态对象可能会有一个自定义相等运算符来改变null解释的方式?如果是这样,只需使用Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) {
  .......
}
于 2011-08-11T16:44:50.590 回答
0

您总是可以只制作类型对象的参数,这就是编译器正在做的事情。当您键入参数动态时,它仅意味着在该方法内它仅对参数的所有使用使用动态调用,但在外部它只是类型对象的签名。你的 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
}
于 2011-08-11T18:41:55.480 回答
0

快速的方法可能是:

if (_owner is null)
{

}
于 2019-04-02T08:59:23.047 回答
0

您可以使用简单性:

var s = data.servicePhoneNumber is null ? "" : data.servicePhoneNumber.Value;
于 2018-11-01T09:30:50.510 回答