C#是否有方便/标准的方法将函数参数列表“强制转换”为元组并返回?
这种“强制转换”操作如果存在于.NET的某个地方,应该不是在语言层面上实现的(因为没有这样的类型:“函数参数列表”),而是在反射库中的somwhere。在前向情况下,它返回精确的元组类型(通过函数名称),在后向情况下 - 使用元组字段调用函数。
它应该看起来像打包/解包功能参数列表到元组。
附加: 是的,这在语言中是不可能的,但我也知道/觉得这可以使用反射和堆栈浏览。
答案 0 :(得分:3)
如果您愿意这样做:
void Foo(int a, bool b, string c)
{
Tuple<int,bool,string> argsTuple = pack();
} // ^^^^^^
...然后答案是不,你不能方便地将方法的参数转换为元组。您可能可以使用反射执行此操作,但这不是.NET Framework提供的开箱即用的功能。
相反,在函数的参数列表中解压缩一个元组 - 即Foo(argsTuple)
- ,你绝对不能在C#中这样做。
答案 1 :(得分:1)
拆包可以非常简单。 您可以创建扩展方法。
public static R Apply<T, U, R>(this Tuple<T, U> t, Func<T, U, R> f)
{
return f(t.Item1, t.Item2);
}
public static R Apply<T, U, V, R>(this Tuple<T, U, V> t, Func<T, U, V, R> f)
{
return f(t.Item1, t.Item2, t.Item3);
}
等等。这也可以用于行动。然后您可以通过以下方式使用这些扩展方法。
tuple.Apply(Method)