【问题标题】:C# ConvertAll syntaxC# ConvertAll 语法
【发布时间】:2015-04-09 04:22:38
【问题描述】:

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

【问题讨论】:

  • 如果你解释一下你想要做什么?

标签: c# convertall


【解决方案1】:

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

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

使用方法组也更短:

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

【讨论】:

    【解决方案2】:

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

    正如错误消息告诉您的那样,“ConvertAll”不接受 1 个参数,因此这应该会提示您需要更多参数(在本例中为数组)这一事实。

    请参阅MSDN,了解如何正确使用 Array.ConvertAll。

    【讨论】:

    • 感谢您的 cmets;我已经找到了这种语法,但是有很多例子显示了 int[] s2 = args.ConvertAll (delegate converter) ;现在已经弃用了吗?
    • 你确定这些例子不是列表,而不是数组吗?这是列表的正确语法。查看示例中的差异here
    • 你是对的,这是我的基本问题:我认为 args 是一个列表,而它是一个数组。谢谢!如果我将其转换为列表: List list = args.OfType().ToList();然后我可以用 int ss = list.ConvertAll(x => int.Parse(x)).Sum(); 求和
    • 很高兴你明白了!
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多