为什么我的OrderBy错误没有给出编译器警告?
问题描述:
我有这个代码进行排序我的阵列,我才意识到排序不工作:为什么我的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工具可以查找这样的特定错误,那我可以添加到我的编译中?
答
调用函数并忽略结果是完全有效的。编译器不知道特定的函数是纯粹的还是有副作用的。
我不认为在这种情况下有错误/警告。函数调用的
样品是通常与忽略结果称为:Dictionary.Remove - 它实际上返回true
/false
不像几乎所有的其他Dictionary
/List
功能。