2013-03-06 56 views
2

我有这个代码进行排序我的阵列,我才意识到排序不工作:为什么我的OrderBy错误没有给出编译器警告?

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(); 

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

回答

5

因为它没有错误,编译器不会在乎你是否不使用返回的值。

如果你想要额外的警告告诉你这样的事情看看JetBrains - ReShaper

7

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

我不认为在这种情况下有错误/警告。函数调用的

样品是通常与忽略结果称为:Dictionary.Remove - 它实际上返回true/false不像几乎所有的其他Dictionary/List功能。

相关问题