我有这一行:
myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;
有时结果没有“Ada No”而我得到了
对象引用未设置为对象的实例。
我写了一个if语句来避免空引用异常:
if(result.FirstOrDefault(m => m.Name == "Ada No").Value != null)
{
myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;
}
但它也没有用。如何在这段代码中避免此异常?如果Ada No存在,工作,如果不工作,我怎么写?感谢。
答案 0 :(得分:7)
FirstOrDefault
将返回null。当代码试图访问设置为null的引用类型变量的成员时,将抛出异常。因此,在访问对象之前,必须检查对象的值是否为空。
如果您使用的是C#6.0,则可以使用null-propagation运算符:
myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No")?.Value;
或者如果您使用的是较低版本:
var firstObj = result.FirstOrDefault(m => m.Name == "Ada No");
if(firstObj != null)
{
myobject.Ada = firstObj.Value;
}
答案 1 :(得分:2)
另一个解决方案是检查Any是否存在任何包含名称等于“Ada No”的成员
请注意.hidden {
display: none !important;
}
add-feature-field-row .form-control {
display: inline-block;
width: 90px;
}
.form-control {
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
-webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
}
button, input, select, textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button, input, optgroup, select, textarea {
margin: 0;
font: inherit;
color: inherit;
}
也不为空!
但是空传播方式写入的次数会少一些,所以它取决于您的偏好,您希望如何读取代码以及它是否是一些性能关键的代码
result