C#查询Dictionary排除指定键返回其余值时结果为空的问题
问题原因
Where子句的过滤逻辑存在根本性错误:
- 现有判断条件
!_chips.ContainsKey(key)和当前遍历的字典项x没有任何关联,是固定布尔值:当传入的key(比如示例中的1500)存在于字典中时,该条件恒为false,会过滤掉字典内所有元素,最终返回空集合。 - 该逻辑实际效果是「传入存在的key就返回空」,和需求要求的「排除传入key对应的值」完全不符。
修正代码
直接将过滤条件改为判断当前遍历项的键不等于传入参数即可,无需额外调用ContainsKey:
public void Build(int key) { Build(_chips .Where(x => x.Key != key) .Select(x => x.Value) .ToList()); }
逻辑说明
- 字典遍历项
x的Key属性对应当前元素的int类型键,x.Key != key会精准过滤掉和传入键匹配的那一项,剩余的就是你需要的所有其他LinkDto实例。 - 该写法自带容错:如果传入的key不存在于字典中,会直接返回字典内的全部值,不需要额外做存在性判断。
内容的提问来源于stack exchange,提问作者John Ohara
相关产品推荐
相关产品推荐

