C#功能链接

uda*_*ana 2 c# chaining

为什么我在以下声明中收到错误?

List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
Run Code Online (Sandbox Code Playgroud)

错误:无法将类型void转换为List?

Dar*_*rov 16

因为AddRange函数不返回值.您可能需要分两步执行此操作:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
Run Code Online (Sandbox Code Playgroud)


Chr*_*sic 7

您还可以使用集合初始值设定项(假设C#3.0+).

List<int> intrs = new List<int> { 1, 2, 3, 45 };
Run Code Online (Sandbox Code Playgroud)

由280Z28编辑:这适用于任何Add方法.构造函数括号是可选的 - 如果要将事物传递给构造函数(如容量),则可以使用上面的代码List<int>(capacity)而不是List<int>上面写的.

以下是有关Object和Collection Initializers的详细信息的MSDN参考.

Dictionary<string, string> map = new Dictionary<string, string>()
    {
        { "a", "first" },
        { "b", "second" }
    };
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 6

因为AddRange修改指定的列表而不是返回包含添加项的新列表.为了表明这一点,它返回void.

试试这个:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
Run Code Online (Sandbox Code Playgroud)

如果要在不修改原始列表的情况下创建新列表,可以使用LINQ:

List<int> intrs = new List<int>();
List<int> newIntrs = intrs.Union(new int[]{1,2,3,45}).ToList();
// intrs is unchanged
Run Code Online (Sandbox Code Playgroud)


the*_*oop 5

AddRange不会返回它添加项目的列表(与StringBuilder不同).你需要做这样的事情:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
Run Code Online (Sandbox Code Playgroud)