我正在使用 c# .net 2.0 并且需要检查从我将对象分配给的方法返回的值是否为空。
我的代码是
MyObjectValue myObjectValue= (MyObjectValue) myObjectField.GetFieldValue();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由 myObjectField.GetFieldValue() 返回的值可能为空,我想在分配给 myObjectValue 之前检查这一点。目前它抛出一个异常对象引用,未设置为对象的值。
实际的代码行使用的是 SharePoint API
SPFieldUserValue lawyerResponsibleFieldValue =
(SPFieldUserValue)lawyerResponsibleUserField.GetFieldValue(
workflowProperties.Item[lawyerResponsibleUserField.Id].ToString());
Run Code Online (Sandbox Code Playgroud)
上面的代码不会抛出 aNullReferenceException如果myObjectField它本身是非空的,除非MyObjectValue是一个值类型。你确定问题不是你在使用时 myObjectValue没有检查它是否为空?
然而,假设GetFieldValue返回object,最简单的方法就是使用一个临时变量:
object tmp = myObjectField.GetFieldValue();
if (tmp != null)
{
MyObjectValue myObjectValue = (MyObjectValue) tmp;
// Use myObjectValue here
}
Run Code Online (Sandbox Code Playgroud)
显然,无论MyObjectValue是引用类型还是值类型,这都将起作用。
编辑:既然你已经发布完整的代码行,有负载的地方可以抛出一个NullReferenceException的地方。我强烈建议您将这一行分成几行以了解发生了什么。
C# 6 (Visual Studio 2015) 引入了Null 条件(又名 Elvis 运算符)...
而不是这个...
myObjectValue = (myObjectValue == null) ? null : myObjectValue.child;
Run Code Online (Sandbox Code Playgroud)
可以使用以下内容...
myObjectValue = myObjectValue?.child;
Run Code Online (Sandbox Code Playgroud)