4

私は次のようにコレクションを初期化できることを知っています

var array = []{"1", "2", "3"};

これにより、String型の配列を作成することが自動的に推測されますが、配列のサイズが固定されているため、配列にインデックスを追加したり、配列からインデックスを削除したりすることはできません。

ジェネリックリストタイプで同じことを行う方法はありますか?コンパイラは、どのタイプ「T」がイニシャライザの項目に基づいているかを推測する必要がありますか?

たぶんnewList(){...}のようなもの

4

4 に答える 4

3

いいえ、これはサポートされていません。typeパラメーターを指定する必要がありますが、コレクション初期化子は引き続き使用できます。

var list = new List<String> { "1", "2", "3" };

ただし、ヘルパーメソッドを作成することはできます

public static class ListUtilities
{
    public static List<T> New<T>(params T[] items)
    {
        return new List<T>(items);
    }
}

このように使用します。

var list = ListUtilities.New("1", "2", "3");

しかし、これはおそらく価値がないでしょう、あなたは少しでも多くを得ることができません。そして、これは最初に配列を作成し、それを使用してリストにデータを入力します。したがって、これはキースニコラスとそれほど違いはありませんvar list = new[] { "1", "2", "3" }.ToList();

于 2013-01-23T23:37:48.323 に答える
2

これはかなり気の利いた例です:

static void Main(string[] args)
{
    var Customer = new { FirstName = "John", LastName = "Doe" };
    var customerList = MakeList(Customer);

    customerList.Add(new { FirstName = "Bill", LastName = "Smith" });
}

public static List<T> MakeList<T>(T itemOftype)
{
    List<T> newList = new List<T>();
    return newList;
}

http://kirillosenkov.blogspot.com/2008/01/how-to-create-generic-list-of-anonymous.html

于 2013-01-23T23:37:22.540 に答える
0

はい。しかし、推論はありません。

var li = new List<int> {1,2,3,4,5,6};

あなたが得る最も近いものは

var li = new List<dynamic> {1,2,3,4,5}
于 2013-01-23T23:36:39.163 に答える
0
var list = new[] {"1", "2", "3"}.ToList();                        
于 2013-01-23T23:42:28.223 に答える