我需要检查是否一个项目不会在C#项目列表存在,所以我有这样一行:为什么Resharper建议我简化“不等于”“不等于”?
if (!myList.Any(c => c.id == myID)))
ReSharper的是在暗示我应该改变,要:
if (myList.All(c => c.id != myID)))
我可以看出它们是相同的,但它为什么会提示更改?由于某种原因,第一种执行速度较慢?
我需要检查是否一个项目不会在C#项目列表存在,所以我有这样一行:为什么Resharper建议我简化“不等于”“不等于”?
if (!myList.Any(c => c.id == myID)))
ReSharper的是在暗示我应该改变,要:
if (myList.All(c => c.id != myID)))
我可以看出它们是相同的,但它为什么会提示更改?由于某种原因,第一种执行速度较慢?
在第一个例子中,在表达式的开头部分很容易错过!
。你因此使表达难以阅读。另外,第一个例子是“不等于”,而第二个例子是“不等于”。并不是巧合,易于阅读的代码可以表达为更容易阅读英文。
更容易阅读的代码很可能会少一些错误,因为它更容易理解它在改变它之前的作用。这是因为第二个例子更清楚ReSharper建议更改您的代码。
我个人发现第一个更容易阅读,虽然我绝对采取你的观点,俯瞰!也许第一个也是最容易误解的。 –
如果您认为它更具可读性,请添加另一个名为'None'的扩展方法? –
多数民众赞成在@RogerLipscombe –
表达的可读性对我个人的意见。
为“我不是在集合项目”我会读这个
if (!myList.Any(c => c.id == myID)))
。这里
if (myList.All(c => c.id != myID)))
读为“集合中的所有项目都不同于我的项目”。
如果我想问的'问题' - 通过我的linq查询 - '是我的项目不在列表中',那么第一个查询更适合我想问的问题。第一个查询前面的!
不是问题。
这是非常有趣的,因为我也发现我想要做的英语的第一场比赛,但其他人不同意 –
@CodingKiwi我们只有通用的一行代码。在这个比赛中,我还会选择All方法。但是你有比我们更多的背景。在这个复杂的背景下任何人都可能会感觉更好不仅感觉更好,而且还可以更易读。 – Ralf
这是如此的真实。如果我的头脑中有内部叙述的代码流,我更喜欢它。例如,任何(==)在我思考时都很有意义,“这是当我需要处理找不到我想要的情况时”。当你发现自己在思考时,所有(!=)更合适,“这是我们需要验证我在这里所有的东西都是有效的”。这完全是关于将代码与内部叙述进行匹配,所以你不必这么想。 – bowserm
一般来说,提出一个积极的问题是更直观的。如果你问用户“你真的不想删除这个记录?”,猜猜他多久会碰到一个错误的按钮。
我个人喜欢把构建这样的周围:
// Not optimal
if (!x) {
A();
} else }
B();
}
// Better
if (x) {
B();
} else }
A();
}
例外可能是测试not null
其中a != null
可能被看作是积极的。
这里提出的问题是'我的物品没有出现在列表中',我仍然将其视为一个正常问题,您可以将其视为正面情况。 '是的,这是缺席,然后这样做......' – Maarten
“我的物品不是在列表中”更接近OS的原始代码。像myList.Absent(c => c.id == myID)这样的假设性陈述会更直接。我同意在这里'全部'情况也不是很直观。在我看来'resharper'往往是清教徒和过分热心的。 –
不,它会运行到相同的查询,但对我来说更清楚:“所有不等于”与“不等于” – wudzik
第二行更清晰。 – Max
可读性,哪一个可读? –