2

我有这段代码来对我的数组进行排序,但我才意识到排序不起作用:

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 工具可以查找像这样的特定错误,我可以添加到我的编译中?

4

2 回答 2

7

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

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

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

于 2013-03-06T05:06:45.087 回答
5

因为它不是错误,所以编译器不会关心您是否不使用返回值。

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

于 2013-03-06T05:08:29.623 回答