为什么var Int32不是此示例中的List <int32> </int32>

时间:2012-11-22 13:52:26

标签: c# linq

好的我正在为另一个SO问题找到答案,我想出了以下函数来获得一个明确的int列表:

    static List<Int32> Example(params List<Int32> lsts)
    {
        List<Int32> result = new List<int>();

        foreach (var lst in lsts)
        {
            result = result.Concat(lst).ToList();
        }

        return result.Distinct().OrderBy(c => c).ToList();
    }

当我在VS2012中查看var时,它会显示Int32类型而不是List<Int32>。如图所示:

The problem

var不应该是List<Int32> ??

类型

3 个答案:

答案 0 :(得分:9)

您在参数类型声明的末尾缺少[]

//                                            v-- this is missing in your code
static List<Int32> Example(params List<Int32>[] lsts)
{
    List<Int32> result = new List<int>();

    foreach (var lst in lsts)
    {
        result = result.Concat(lst).ToList();
    }

    return result.Distinct().OrderBy(c => c).ToList();
}

答案 1 :(得分:5)

你被另一个编译错误误导了 您的参数不是数组。

您需要将参数更改为params List<Int32>[] lsts以使其成为列表数组。 (或者,更好的是,params IEnumerable<Int32>[] lsts

请注意,您还可以完全摆脱foreach循环并编写

return lsts.SelectMany(list => list)
           .Distinct()
           .OrderBy(i => i)
           .ToList();

答案 2 :(得分:0)

关键字params的参数必须是数组。