为什么Resharper建议我将"不等于"简化为"所有不相等"?

Fio*_*ite 28 c# linq resharper

我需要检查C#中的项目列表中是否存在项目,所以我有这一行:

if (!myList.Any(c => c.id == myID))) 
Run Code Online (Sandbox Code Playgroud)

Resharper建议我将其更改为:

if (myList.All(c => c.id != myID))) 
Run Code Online (Sandbox Code Playgroud)

我可以看出它们是等价的,但为什么它表明这种变化呢?由于某种原因,第一个实现是否较慢?

Maa*_*ten 28

表达的可读性对我个人意见.

我会读这个

if (!myList.Any(c => c.id == myID))) 
Run Code Online (Sandbox Code Playgroud)

因为'我的物品不在集合中'.这个

if (myList.All(c => c.id != myID))) 
Run Code Online (Sandbox Code Playgroud)

读为"集合中的所有项目都与我的项目不同".

如果我想通过我的linq查询询问"问题"是"我的项目不在列表中",那么第一个查询更适合我想问的问题.第!一个查询的前面不是问题.

  • 这非常有趣,因为我也发现了我想要做的第一场英语比赛,但其他人不同意 (8认同)
  • 这是千真万确的。如果代码与我头脑中的内部叙述一致,我会更喜欢它。例如,当我思考“这是我需要处理找不到我想要的情况的情况”时, !Any(==) 就很有意义。当您发现自己在想“这是我们需要验证我这里拥有的所有内容是否有效”时,All(!=) 更合适。这一切都是为了将​​代码与内部叙述相匹配,因此您不必考虑那么多。 (2认同)

Dav*_*rno 18

!在第一个例子中,很容易错过表达式的开头.因此,您的表达难以理解.另外,第一个例子读作"not any equal",而第二个例子是"all not equal to".将易于阅读的代码表达为更易于阅读的英语并非巧合.

更容易阅读代码可能会减少错误,因为在更改之前更容易理解代码.这是因为第二个例子更清楚ReSharper建议更改你的代码.

  • 我个人觉得第一个更容易阅读,虽然我绝对明白你的观点!也许第一个也是最容易误解的. (14认同)
  • 添加另一个名为"None"的扩展方法,如果你认为它更具可读性? (5认同)