You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中使用Lambda遇编译错误,如何正确使用FirstOrDefault?

错误原因

FirstOrDefault()返回的是符合条件的Priority实例(找不到匹配项时返回null),但else if条件必须是布尔值(true/false),直接把Priority对象放在条件里,C#无法自动将其转换为布尔值,所以触发了编译错误。

修正方法

根据你的实际需求,有两种正确的处理方式:

1. 仅判断是否存在匹配项

如果你的目的只是检查列表中是否存在与当前priority的Id相同的元素,直接使用Any()方法即可——它会直接返回布尔值:

else if (status.Priorities.Priority.Any(x => x.Id == priority.Id))
{
    priority.Default = "true";
}

2. 获取匹配对象后再判断

如果需要先获取匹配的Priority对象,再进行后续操作,可以先把FirstOrDefault()的结果赋值给变量,再判断变量是否不为null:

else
{
    var matchedPriority = status.Priorities.Priority.FirstOrDefault(x => x.Id == priority.Id);
    if (matchedPriority != null)
    {
        priority.Default = "true";
    }
}
额外提醒

你当前是在遍历status.Priorities.Priority列表中的每个priority元素,所以x => x.Id == priority.Id的条件永远能匹配到当前遍历的元素,也就是说上面的条件会永远成立。如果这不是你预期的逻辑,可能需要重新梳理业务需求,比如是否要匹配其他条件(比如是否存在默认优先级)。

内容的提问来源于stack exchange,提问作者Learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:16:13