为什么我在以下声明中收到错误?
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
错误:无法将类型 void 转换为 List ?
因为AddRange函数不返回值。您可能需要分两步执行此操作:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
您还可以使用集合初始化程序(假设 C# 3.0+)。
List<int> intrs = new List<int> { 1, 2, 3, 45 };
由 280Z28 编辑:这适用于任何有Add
方法的东西。构造函数括号是可选的 - 如果你想将事物传递给构造函数,例如容量,你可以这样做List<int>(capacity)
而不是List<int>
上面写的。
这是有关Object 和 Collection Initializers的详细信息的 MSDN 参考。
Dictionary<string, string> map = new Dictionary<string, string>()
{
{ "a", "first" },
{ "b", "second" }
};
因为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
AddRange 不会返回已添加项目的列表(与 StringBuilder 不同)。你需要做这样的事情:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
AddRange() 声明为:
public void AddRange(object[]);
它不返回列表。
顺便说一句,在 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
除了其他答案之外,您还可以添加自己的扩展方法来添加范围和返回列表(这并不是一个好习惯)。
顺便说一句,如果你已经声明了 intrs,你可以用括号来做:
(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });
但是,我更喜欢初始化语法。
尽管其他人已经提到 AddRange 不返回值,但根据为替代方案提供的示例,还应该记住,除了前面提到的 .NET 3.5 代码之外,List 的构造函数还将采用 T 的 IEnumerable +
例如:
List<int> intrs = new List<int>(new int[]{2,3,5,7});
还有另一种方法。
List<int> intrs = new List<int>
{
1,
2,
3,
45
};