如何将函数参数列表转换为Tuple

时间:2010-11-21 15:52:55

标签: c# tuples

C#是否有方便/标准的方法将函数参数列表“强制转换”为元组并返回?

这种“强制转换”操作如果存在于.NET的某个地方,应该不是在语言层面上实现的(因为没有这样的类型:“函数参数列表”),而是在反射库中的somwhere。在前向情况下,它返回精确的元组类型(通过函数名称),在后向情况下 - 使用元组字段调用函数。

它应该看起来像打包/解包功能参数列表到元组。

附加: 是的,这在语言中是不可能的,但我也知道/觉得这可以使用反射和堆栈浏览。

2 个答案:

答案 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)