C#:如何对动态对象执行空检查

时间:2011-08-11 16:42:33

标签: c# dynamic null-check

如何在动态对象上执行 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
}

4 个答案:

答案 0 :(得分:33)

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

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

答案 1 :(得分:0)

你总是可以创建类型对象的参数,这就是编译器正在做的事情。当你输入一个动态参数时,它只意味着在该方法中只对动态调用使用param的所有用途,但在它之外它只是一个类型对象的签名。动态对象的一个​​更强大的用法是让你调用的方法有重载,所以如果你保持你的例子相同而且只有两个重载,它会根据运行时类型调用这两个方法中的一个,你可以随时为更多类型添加更多。

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
}

答案 2 :(得分:0)

最快的方法可能是:

if (_owner is null)
{

}

答案 3 :(得分:-1)

您可以使用简单性:

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