本当の理由は、設計者が、このわずかな構文糖衣の利点が実装の労力に見合うだけの価値がある、または混乱を引き起こす可能性があると単純に感じなかったことです。
を作成する場合は、わずかな問題がありますList<int>
。これはどういう意味ですか?
var list = new List<int>(10);
それは容量が 10 の新しいリストですか、それとも 10 という単一の要素を含む新しいリストですか?
ネタバレ、コンパイラがそれをどのように解釈するかわからない場合:
容量扱いとなります。T
以外の場合はint
、1 つの要素として扱われます。また、パラメータ名を指定すると、単一のアイテムとして扱われます—List<int>(items:10)
いずれにせよ、次のように書けない理由はありません。
var list = new List<string>(new[] { "test string 1", "test string 2" });
これは、引数を提供するコンストラクターがあった場合にコンパイラーが行うこととまったく同じでありparams
、コレクション初期化子よりもわずかに効率的です。これを達成するためにいくつかの余分な文字を入力しなければならないことは、実際には大したことではありません。