为什么我在以下声明中收到错误?
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
错误:无法将类型void转换为List?
答案 0 :(得分:16)
因为AddRange函数没有返回值。您可能需要分两步执行此操作:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
答案 1 :(得分:7)
您也可以使用集合初始值设定项(假设C#3.0 +)。
List<int> intrs = new List<int> { 1, 2, 3, 45 };
通过280Z28编辑:这适用于任何使用Add
方法的内容。构造函数括号是可选的 - 如果要将事物传递给构造函数(如容量),则可以使用List<int>(capacity)
而不是上面写的List<int>
来执行此操作。
以下是有关Object and Collection Initializers的详细信息的MSDN参考。
Dictionary<string, string> map = new Dictionary<string, string>()
{
{ "a", "first" },
{ "b", "second" }
};
答案 2 :(得分:6)
因为AddRange修改了指定的列表,而不是返回包含添加项的新列表。为了表明这一点,它返回void
。
试试这个:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
如果您想在不修改原始列表的情况下创建新列表,可以使用LINQ:
List<int> intrs = new List<int>();
List<int> newIntrs = intrs.Union(new int[]{1,2,3,45}).ToList();
// intrs is unchanged
答案 3 :(得分:5)
AddRange不会返回它添加项目的列表(与StringBuilder不同)。你需要做这样的事情:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
答案 4 :(得分:2)
AddRange()声明为:
public void AddRange(object[]);
它不会返回列表。
答案 5 :(得分:1)
顺便说一句,在C#3.x中(不确定是2.0)你可以做任何一个
List<int> intrs = new List<int>{1,2,3,45};
List<int> intrs = new []{1,2,3,45}.ToList(); // with Linq extensions
除了其他答案,您可以添加自己的扩展方法,这将添加范围和返回列表(不是这是一个好习惯)。
答案 6 :(得分:0)
顺便说一句,如果你已经声明了intrs,你可以用括号完成它:
(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });
但是,我更喜欢初始化语法。
答案 7 :(得分:0)
虽然其他人已经提到过AddRange没有返回一个值,但根据为替代方案提供的样本,还应该记住,除了前面提到的代码之外,List的构造函数也将采用IE的数量。 .NET 3.5 +
例如:
List<int> intrs = new List<int>(new int[]{2,3,5,7});
答案 8 :(得分:0)
还有另一种方式。
List<int> intrs = new List<int>
{
1,
2,
3,
45
};