繁体   English   中英

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

[英]C#: How to perform a null-check on a dynamic object

如何对动态 object 执行空值检查

伪代码:

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
}

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

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

快速的方法可能是:

if (_owner is null)
{

}

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

您可以使用简单性:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM