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

LINQ .Any()方法返回错误值问题求助

问题原因与解决方案

哦,我一眼就看到问题所在啦!你这段代码的逻辑踩了个很容易犯的小坑:

你写的myList.Select(x => x.Id == 'MyId').Any(),其实做了两件事:

  1. Select会把列表里的每一个元素,转换成一个布尔值(判断这个元素的Id是不是等于'MyId'的结果),生成一个布尔值序列
  2. 后面的Any()默认是检查这个序列是否包含至少一个元素,而不是检查序列里有没有true的元素

所以只要myList不为空,不管有没有匹配的Id,这个布尔序列至少有一个元素,Any()就会返回true,这就是为什么你觉得结果不对。

正确的写法有两种,推荐第一种:

  • 最简洁高效的写法:直接使用Any的带条件重载,它会直接遍历列表,找到第一个符合条件的元素就停止,性能更好:
    var myList = GetMethod();
    if(myList != null && myList.Any(x => x.Id == "MyId"))
    {
        // Do work
    }
    
  • 如果一定要保留Select的写法(其实没必要),可以给Any加一个判断条件,检查序列里是否有true的元素:
    var myList = GetMethod();
    if(myList != null && myList.Select(x => x.Id == "MyId").Any(b => b))
    {
        // Do work
    }
    

额外优化:简化空判断

你还可以用C#的空条件运算符和空合并运算符,让代码更简洁:

var myList = GetMethod();
if(myList?.Any(x => x.Id == "MyId") ?? false)
{
    // Do work
}

myList?.Any(...)会在myList为null时返回null,然后?? false把null转换成false,逻辑和之前完全一致,但代码更紧凑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:00