类似Python的列表在C#中解压缩?

时间:2009-02-20 04:28:17

标签: c# iterable-unpacking

在python中,我可以这样做:

List=[3, 4]

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

Add(*List) #7

有没有办法在C#中执行此类操作或类似操作?基本上我希望能够将一个参数列表传递给一个任意函数,并将它们作为函数的参数应用,而无需手动解包List并调用显式指定参数的函数。

5 个答案:

答案 0 :(得分:6)

嗯,最接近的是反射,但这是缓慢的......但请看MethodInfo.Invoke ......

答案 1 :(得分:3)

您可以在定义方法时使用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

答案 2 :(得分:1)

使用LINQ,您可以做到非常接近您的示例。

 var list = new List<int> { 3, 4 };
 var sum = list.Sum();

答案 3 :(得分:1)

你不能,你可以做一些接近挥手的东西(要么屈服于foreach,要么在收集lambda的集合上添加foreach扩展方法),但没有像你在python中获得的那样优雅

答案 4 :(得分: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#的模式匹配,以确切了解您正在寻找的内容。