2012-03-23 9 views

答えて

7

配列内の項目の数を決定するためのより一般的な手段はLength性であるからです。 CountLengthの両方を持つことは紛らわしいものです。

3

すでに配列がある場合は、同じことを行うarray.Lengthが既に存在するため、array.Countに電話する必要はありません。 CountLengthの両方が直接入手できる場合は、どちらを使用するかについては無意味な議論があります。

2

Arrayにはすでに1.0バージョンと同じ意味のLengthプロパティが設定されている可能性が高いためです。

編集:

としてはとても私のオリジナルの推測では1.0の参照が有効になりにくいです、version information(ICollectionインターフェイスを持っていた、すでに1.0を指摘したもう一つの可能​​性が高い理由は十分に既存の言語/ライブラリは長さLengthプロパティを使用していることです。配列。

のテーマに関する興味深いコメントがcount vs length vs size in a collectionであります。

+0

私は1.0のバージョンに言及しているので、私はこの回答を受け入れています。私は、後方互換性がこの設計の決定にとって重要だと考えています。彼らがそれをやり直すのであれば、おそらくSystem.Arrayには.Countプロパティだけがあり、.Lengthプロパティはありません。実際には、IList.Countプロパティの代わりにIList.Lengthという名前を付けておくべきだと思います。 –

+2

@ zooone9243 'ICollection'は.NET 1.0以降も存在しています(非標準形)(http://msdn.microsoft.com/en-us/library/system.collections.icollection(v = vs.71))。 aspx)。下位互換性がこれに該当するかどうかは完全にはわかりません。 – vcsjones

+1

@vcsjonesこれは1.0ではなく1.1です。私は1.0のリファレンスを見つけることができませんが、私は同じことが不思議でした。 – hvd

0

はおそらく同じことを行いLengthプロパティが既に存在だから。そのため、パフォーマンス上の理由から、彼らはあなたが長さの代わりに、カウントを使用したいと思います、これはとにかく長さを包むだけです。明示的な実装は、Listなどのものと相互運用できるためのものです。

+1

一般的に私はあなたが正しい軌道に乗っていると思っていますが、これはパフォーマンス重視のものよりもデザイン主導の決定でしょう。 –

2

配列にはすでに.Lengthというプロパティがあります。明示的な実装として.Countを使用すると、重複した機能が隠されます。

0

これは純粋に仮説ですが、私はそれを学んだわけではありませんが、ListにCountメソッドではなくCountプロパティがある理由を尋ねるべきです。配列は固定長です。 (または実際に別の)配列を再作成することなく、配列に何かを追加または削除することはできません。 Listは主にサイズが動的であるため、Countメソッドのロジックに使用されます。リストのCountプロパティは、値が削除/追加されたときにコードによって自動的に増減されます。配列の長さプロパティはおそらくメモリ内の長さを直接または類似したものに反映します。

+1

Countメソッドは、Listのメソッドではなく、LINQによって提供されるIEnumerable拡張メソッドです。 –

+2

'Listは大部分が動的なので、Countメソッドで使用されています.' - IList上のCountが本当にプロパティであるとき**メソッド**を太字にしたのは興味深いと思います(http://msdn.microsoft .com/en-us/library/system.collections.icollection.count.aspx)。 LINQによって提供されるCountメソッドがありますが、これも配列でも機能します。 – vcsjones

+0

@ zooone9243私はタイプミスをしました。 – Silvermind