0

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;
}
4

2 に答える 2

2

ConvertAll実際の配列インスタンスを呼び出していますがConvertAll、静的メソッドであるため、配列の内容にアクセスできません。配列自体を最初のパラメーターとして渡して使用できるようにする必要があります。 static メソッドは、Arrayクラス自体でそれを呼び出す必要があります。

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

また、メソッド グループを使用して短くします。

int s2 = Array.ConvertAll(args, int.Parse).Sum();
于 2015-04-09T04:31:46.877 に答える
1

に変更args.ConvertAll(x => int.Parse(x)).Sum();Array.ConvertAll(args, x => int.Parse(x)).Sum();ます。

エラー メッセージが示しているように、'ConvertAll' は 1 つの引数を取らないため、より多くの引数 (この場合は配列) が必要であることがわかります。

Array.ConvertAll の適切な使用法については、MSDNを参照してください。

于 2015-04-09T04:31:46.400 に答える