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,或者在接受 lambda 的集合上添加一个 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 回答