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/を返します。falseDictionaryList

于 2013-03-06T05:06:45.087 に答える
5

エラーではないため、返された値を使用しなくてもコンパイラは気にしません。

このようなことについて追加の警告が必要な場合は、JetBrains - ReShaperをご覧ください。

于 2013-03-06T05:08:29.623 に答える