类似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#的模式匹配,以确切了解您正在寻找的内容。