为什么我的OrderBy错误没有给出编译器警告?

时间:2013-03-06 05:03:41

标签: c# linq

我有这个代码来对我的数组进行排序,我只是意识到排序不起作用:

if(desc)items.OrderByDescending(x=>x.ExpirationDate);
else items.OrderBy(x=>x.ExpirationDate);

正确的代码是:

if(desc)items=items.OrderByDescending(x=>x.ExpirationDate).ToArray();
else items=items.OrderBy(x=>x.ExpirationDate).ToArray();

但是为什么编译器(我使用的是Mono和Visual C#2010)没有给我一个错误,甚至是警告? 我错过了一些设置,或者C#编译器根本不可能意识到我的原始代码是无用的?如果是后者,是否有任何lint工具可以查找这样的特定错误,我可以添加到我的编译中?

2 个答案:

答案 0 :(得分:7)

调用函数并忽略结果是完全有效的。编译器不知道特定功能是纯粹的还是有副作用的。

我不认为在这种情况下会出现错误/警告。

通常使用忽略结果调用的函数调用示例:Dictionary.Remove - 它实际上返回true / false,与其他所有Dictionary / List不同功能。

答案 1 :(得分:5)

因为它不是错误,编译器不会在意您是否使用返回值。

如果您需要其他警告来告诉您类似的事情,请查看JetBrains - ReShaper