2014年10月24日

コレクション系インターフェース 早見表

コレクション系インターフェースの型パラメータの共変性、および、実装されるメソッド、プロパティの早見表。
※IReadOnly~ は .NET 4.5 から導入
※非ジェネリックはもう使わないと思うので省略

共変 <out T>
メソッド プロパティ
GetEnumerator()
Add( T )
Clear()
Contains( T )
CopyTo( T[], int )
Remove( T )
IndexOf( T )
Insert( int, T )
RemoveAt( int )
Count { get; }
IsReadOnly { get; }
this[ int ] { get; }
this[ int ] { set; }
IEnumerable<T>
ICollection<T>
IList<T>
IReadOnlyCollection<T>
IReadOnlyList<T>

メソッド プロパティ
Add( TKey, TValue )
ContainsKey( TKey )
Remove( TKey )
TryGetValue( TKey, out TValue )
this[ TKey ] { get; }
this[ TKey ] { set; }
Keys { get; }
Values { get; }
IDictionary
<TKey, TValue>
他の項目は ICollection<T> 参照
Keys と Values は ICollection<T>
IReadOnlyDictionary
<TKey, TValue>
他の項目は IReadOnlyCollection<T> 参照
Keys と Values は IEnumerable<T>

雑感

元々あまり使われなかっただろう IsReadOnly プロパティは、IReadOnly~ インターフェースが導入されたため、完全に要らない子に・・・

IReadOnlyDictionary の Keys/Values プロパティの戻り値が IReadOnlyCollection<T> ではなく IEnumerable<T> なのは、Count プロパティの使用頻度と実装のし易さあたりが理由?
確かに Keys や Values の Count プロパティなんてほぼ使わないだろうし、IEnumerable<T> だと yield で簡単実装できるから、いい判断だと思う。
逆に、IDictionary の Keys/Values プロパティの戻り値 ICollection<T> は機能が過剰だし、実装も面倒。

.NET 4.5 からは IReadOnly~ を積極的に使っていこう・・・かな

0 件のコメント:

コメントを投稿