C# 推断列表是否可以初始化?

C# 推断列表是否可以初始化?,c#,.net,C#,.net,我知道我可以按如下方式初始化集合 var array = []{"1", "2", "3"}; 这将自动推断我想要创建一个字符串类型的数组,但这将限制我从数组中添加或删除索引,因为数组具有固定的大小 对于泛型列表类型是否也有相同的操作,编译器应该根据初始值设定项中的项推断出哪种类型“T” 也许像new List(){…}是的。但没有推论 var li = new List<int> {1,2,3,4,5,6}; var li=新列表{1,2,3,4,5,6}; 最接近你的是 v

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

var array = []{"1", "2", "3"};
这将自动推断我想要创建一个字符串类型的数组,但这将限制我从数组中添加或删除索引,因为数组具有固定的大小

对于泛型列表类型是否也有相同的操作,编译器应该根据初始值设定项中的项推断出哪种类型“T”


也许像new List(){…}

是的。但没有推论

var li = new List<int> {1,2,3,4,5,6};
var li=新列表{1,2,3,4,5,6};
最接近你的是

var li = new List<dynamic> {1,2,3,4,5}
var li=新列表{1,2,3,4,5}

这里有一个很好的例子:

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;
}
static void Main(字符串[]args)
{
var Customer=new{FirstName=“John”,LastName=“Doe”};
var customerList=制造清单(客户);
添加(新的{FirstName=“Bill”,LastName=“Smith”});
}
公共静态列表生成列表(T itemOftype)
{
List newList=新列表();
返回newList;
}

否,不支持此操作-您必须指定类型参数,但仍可使用


但这可能不值得,如果有什么收获的话,你也得不到多少。这将首先创建一个数组并使用它填充一个列表。因此,这与Keith Nicholas’var list=new[]{“1”、“2”、“3”}.ToList()没有太大区别

我认为OP是在表达式的RHS上寻找类型推断。这不做类型推断,这是一个不错的例子。使用泛型方法的类型推断来构建列表。很好。是的,当我找到它时,我非常兴奋。它被书签为我的“你应该使用这个”页面之一:)这无疑是一个聪明的技巧,可以处理匿名类型,乍一看似乎不可能,但实际上不要使用它。如果因为无法命名类型而不得不依靠类型推断来实现某些功能,这就很好地表明,您的类型一开始就不应该是匿名的。@DanielBrückner我的评论更傻。虽然它确实满足了OP的要求,但当您可以使用命名类型时,我从来都不是匿名类型的超级粉丝。也就是说,我认为这是对OP问题的一个有趣的解决方案,因此我发布了它。它确实解决了问题的要求。只是巧合,我的评论听起来像是对你的回应-我在你提交你的评论之前就开始键入,但有一段时间没有提交我的。阅读问题,基本上这是他得到他想要的最简单的方式。哈哈,重读这个问题后,我同意你是正确的(基思:)。他只是在寻找一种不指定类型而创建列表的方法。他真的不需要一个泛型:)+1即使它是一只丑小鸭,我也不得不对这个问题的最直接的答案投赞成票……+1这是在
Tuple.Create中使用的相同方法。Create
,这意味着不用键入
新的Tuple(“one”,1)
,你只需编写
Tuple.Create(“one”,1)
很好的提示-我不知道Tuple.Create()方法,并试图避免使用此类,特别是因为构造函数调用过于冗长。也许这给了他们第二次机会。
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();