![](/img/trans.png)
[英]Is there C# code to invoke the null-check feature of `brtrue`/`brfalse` instruction directly on an object reference?
[英]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.