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

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

伪代码:

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 } 

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

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

你总是可以创建类型对象的参数,这就是编译器正在做的事情。 当你输入一个参数dynamic时,它只意味着在该方法中只有它使用动态调用来进行param的所有使用,但在它之外它只是一个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为空? “”:data.servicePhoneNumber.Value;