4

我知道我可以按如下方式初始化集合

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

这将自动推断我想创建一个字符串类型的数组,但这将限制我在数组中添加或删除索引,因为数组具有固定大小。

无论如何对通用列表类型做同样的事情,编译器应该根据初始化程序中的项目推断哪种类型“T”?

也许像 new List(){...}

4

4 回答 4

3

不,这不受支持 - 您必须指定类型参数,但仍然可以使用集合初始值设定项。

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 回答