在转换和分配之前检查值是否为空

van*_*van 4 c# .net-2.0

我正在使用 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)

Jon*_*eet 6

上面的代码不会抛出 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的地方。我强烈建议您将这一行分成行以了解发生了什么。


Sun*_*est 5

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)