在python中,我可以这样做:
List=[3, 4]
def Add(x, y):
return x + y
Add(*List) #7
有没有办法在C#中执行此类操作或类似操作?基本上我希望能够将一个参数列表传递给一个任意函数,并将它们作为函数的参数应用,而无需手动解包List并调用显式指定参数的函数。
答案 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);
答案 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#的模式匹配,以确切了解您正在寻找的内容。