2016-04-13 10 views
4

私は、次の条件がリストが空であるかどうかをチェックするために使用される多くのコードスニペットで見た:私は思ったんだけどList <T> .Count <= 0かどうかチェックするのはなぜですか?

List<string> someList = someFunctionThatPopulatesAList(); 
if (someList == null || someList.Count <= 0) 
    return; 

- 代わりに以下の条件を使用しない理由:

if (someList == null || someList.Count == 0) 
    return; 

はですList<T>.Countが負の場合はありますか?

+6

いいえ、ありません。あなたは正しいと言います。 '<=' 012 == – mostafa8026

+6

またはそれ以上のリストを使用する必要はありません .Any() – Hendry

+0

'someList.Count <= 0'を使うコードは見たことがありません。 – Toxantron

答えて

5

あなたは、単にリストがIEnumerable<T>を使用して、LINQのオプションを使用したい場合は、あなたがそれを使用できることに注意してください

if ((someList!= null) && (!someList.Any())) { 

} 

好きな()を使用しようとすることができます。

List.Countが負の場合はありますか?

いいえ、そうではありません。実際には、Countlengthのような演算を使用しているときは、符号付き整数が返されるので、それを実装しているかどうかをチェックして、それが肯定的な結果であるかどうかを確認するほうがはるかです()。そのチェックをしてください。それ以上のアイデアの実装。

+0

いいえ、彼はまだヌルチェックが必要ですが、anyはカウントチェックを置き換え、そうでなければnullにスローします –

+0

しかし、someListがメソッドからの戻り値であればnullでないかどうかを調べる必要があるかもしれません – auburg

1

はい、あなたは正しいです、それを使用する必要はありません。

Any() @Rahulの提案する拡張方法を使用することもできます。 しかし、Count()を使用することが推奨されているので、List<T>をチェックしているため、サイズが既に分かっているため、少し速くなります。

  • 使用リストを使用している場合、それはそれはサイズです知っているので、カウント。
  • 配列の長さを使用する
  • IEnumerableを使用している場合は、.Count()より.Any()を使用します。これは、1つの項目をチェックした後に停止するので高速になります。

REFは - List<T> Any or Count?

0

他の人が言ったように:Any()を使用すると、良い解決策です。

Lengthを使用する場合、Length <= 0を使用すると、Length == 0と比較した方が良い理由は2つあります。

  1. コードを再利用する方が安全です。コードは、標準の.net List <>実装以外のいくつかの他のリストクラスを使用するように変更でき、場合によっては、Length()に負の値を返す可能性があります。そのようなクラスを作成することは私の意見では非常に悪い考えですが、時には悪いアイデアに従うことを選ぶ人もいます。

  2. コード解析ツールを使用すると、コード解析ツールでLengthが正の値を持つことがわかり、コードの有意義な分析を行うツールの能力を向上させることができます。

関連する問題