是推断列表初始化可能的
本文关键字:初始化 列表 | 更新日期: 2023-09-27 17:55:26
我知道我可以初始化一个集合,如下所示
var array = []{"1", "2", "3"};
这将自动推断我想创建一个字符串类型的数组,但这将限制我在数组中添加或删除索引,因为数组具有固定大小。
无论如何,是否可以对泛型列表类型执行相同的操作,并且编译器应根据初始值设定项推断哪种类型"T"?
也许像新列表(){...}
不,这不受支持 - 您必须指定类型参数,但仍可以使用集合初始值设定项。
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();
没有什么不同。
这是一个非常漂亮的例子:
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
var list = new[] {"1", "2", "3"}.ToList();
是的。但没有推论.
var li = new List<int> {1,2,3,4,5,6};
最接近的是
var li = new List<dynamic> {1,2,3,4,5}