C#ConvertAll语法

时间:2015-04-09 04:22:39

标签: c# convertall

我试图理解C#中ConvertAll的语法,尽管看了几个例子并尝试复制它们,但我无法获得包含s2的以下行来编译; VSE2013说

  

"错误1方法没有过载' ConvertAll'需要1个参数"。

错误消息是什么意思?我哪里错了?是的,我理解Select可以在这些情况下使用得更好,原因有几个。谢谢!

static int Main(string[] args)
{ 
    Console.WriteLine ("jello world");

    int s1 = args.Sum(st => int.Parse(st));
    int s2 = args.ConvertAll(x => int.Parse(x)).Sum();
    int s3 = args.Select(st => int.Parse(st)).Take(2).Sum();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您正在实际的数组实例上调用ConvertAll - 但ConvertAll是一种静态方法,因此无法访问您的数组内容 - 您需要传递数组本身作为第一个参数,以便它可以使用它 - 因为它的静态方法应该在Array类本身上调用它:

int s2 = Array.ConvertAll(args, x => int.Parse(x)).Sum();

使用方法组也更短:

int s2 = Array.ConvertAll(args, int.Parse).Sum();

答案 1 :(得分:1)

args.ConvertAll(x => int.Parse(x)).Sum();更改为Array.ConvertAll(args, x => int.Parse(x)).Sum();

正如错误消息告诉你的那样,'ConvertAll'不会带1个参数,所以这应该让你知道你需要更多的参数(在这种情况下,数组)。

请参阅MSDN以正确使用Array.ConvertAll。