我试图理解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;
}
答案 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。