我遇到了似乎无法修复的错误。在对Stack Overflow进行了一些研究之后,似乎空合并运算符可以解决我的问题,但是并没有帮助。这是给出错误的代码:
List<OperationsReviewLevelResult> results = new List<OperationsReviewLevelResult>();
foreach (var approval in OperationsReviewers.ApprovalItems)
{
var result = new OperationsReviewLevelResult();
result.ApproverName = approval.Results.FirstOrDefault().Name ?? "";
result.ReviewLevel = approval.Name;
result.Comment = approval.Results.FirstOrDefault().Comments ?? "";
results.Add(result);
}
运行此代码时,我得到:
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
来自行result.ApproverName = approval.Results.FirstOrDefault().Name ?? "";
。我添加了null合并运算符以检查null值,但这不能解决我的问题。错误是因为没有批准Results
,所以我假设FirstOrDefault
linq方法将返回默认值,并且当它意识到默认值具有Name
的空值时,将使用空合并运算符返回运算符右侧的""
空字符串。
[请让我知道我是否缺少某些内容,因为即使添加空合并运算符,我似乎也无法理解为什么会收到此错误。
在每个.FirstOrDefault()
调用之后,您需要添加?.
运算符。这是一个完整的解决方案:
List<OperationsReviewLevelResult> results = new List<OperationsReviewLevelResult>();
foreach (var approval in OperationsReviewers.ApprovalItems)
{
var result = new OperationsReviewLevelResult();
result.ApproverName = approval.Results.FirstOrDefault()?.Name ?? "";
result.ReviewLevel = approval.Name;
result.Comment = approval.Results.FirstOrDefault()?.Comments ?? "";
results.Add(result);
}
如果结果的其他部分可能为空,则可以使用完整的偏执路线
List<OperationsReviewLevelResult> results = new List<OperationsReviewLevelResult>();
foreach (var approval in OperationsReviewers.ApprovalItems)
{
var result = new OperationsReviewLevelResult();
result.ApproverName = approval?.Results?.FirstOrDefault()?.Name ?? "";
result.ReviewLevel = approval?.Name;
result.Comment = approval?.Results?.FirstOrDefault()?.Comments ?? "";
results.Add(result);
}
最可能的原因是FirstOrDefault()
返回null
(作为默认值),因此FirstOrDefault().Name
引发异常。您可以尝试使用[?.
]进行空传播
foreach (var approval in OperationsReviewers.ApprovalItems)
results.Add(new OperationsReviewLevelResult() {
ApproverName = approval.Results.FirstOrDefault()?.Name ?? "",
ReviewLevel = approval.Name,
Comment = approval.Results.FirstOrDefault()?.Comments ?? "",
});