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

在python中,我可以这样做:

List=[3, 4] def Add(x, y): return x + y Add(*List) #7 

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

嗯,最接近的是reflection,但这是缓慢的……但是看看MethodInfo.Invoke ……

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

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

使用LINQ,您可以执行此操作,这非常接近您的示例。

  var list = new List { 3, 4 }; var sum = list.Sum(); 
 Func, float> add = l => l[0] + l[1]; var list = new List { 4f, 5f }; add(list); // 9 

要么:

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

考虑到它是静态类型的,你是最接近c#的。 您可以查看F#的模式匹配,以确切了解您正在寻找的内容。