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