10

Pythonでは、次のようなことができます:

List=[3, 4]

def Add(x, y):
    return x + y

Add(*List) #7

C#でこれを行う方法や同様の方法はありますか? 基本的に、引数のリストを任意の関数に渡し、リストを手動でアンパックしてパラメーターを明示的に指定して関数を呼び出すことなく、それらを関数のパラメーターとして適用できるようにしたいと考えています。

4

4 に答える 4

6

まあ、最も近いのはリフレクションですが、それは遅い側です...しかし、MethodInfo.Invokeを見てください...

于 2009-02-20T04:49:59.560 に答える
5

メソッドを定義するときに params キーワードを使用すると、(ToArray を呼び出した後に) リストをメソッド呼び出しに直接配置できます。

public static void UseParams(params object[] list)
{
        for (int i = 0; i < list.Length; i++)
        {
            Console.Write(list[i] + " ");
        }
        Console.WriteLine();
}

...後で次のように呼び出すことができます。

object[] myObjArray = { 2, 'b', "test", "again" };
UseParams(myObjArray);

参考: http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

于 2011-10-04T15:55:13.013 に答える
1

少し手を振るだけで近いことを行うことはできますが (foreach に譲るか、ラムダを取るコレクションに foreach 拡張メソッドを追加します)、Python で得られるほどエレガントなものはありません。

于 2009-02-20T04:53:02.223 に答える
0
Func<List<float>, float> add = l => l[0] + l[1];
var list = new List<float> { 4f, 5f };
add(list); // 9

また:

Func<List<float>, float> add = l => l.Sum();
var list = new List<float> { 4f, 5f };
add(list); // 9

静的に型付けされていることを考えると、C# で得られる最も近いものです。まさに探しているものについて、F# のパターン マッチングを調べることができます。

于 2009-02-20T04:56:11.043 に答える