消除Func和Action引入的重复代码

时间:2013-07-24 02:38:22

标签: c# action func

有一个返回类型的泛型函数。

TResult Invoke<TResult>(Func<string, TResult> callback)
{
    string message = Generate_some_string();
    return callback(message);
}

还有类似的没有返回类型,因为没有Func。

void Invoke(Action<string> callback)
{
    string message = Generate_some_string();
    callback(message);
}

但这些是重复的代码。一旦Invoke发生更改,就必须相应地更改Invoke。有没有办法消除重复的代码?

谢谢, 吉姆

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

void Invoke(Action<string> callback)
{
    Invoke<int>(s=>{callback(s);return 0;});
}

这样,您的所有逻辑都保留在Func版本中,您的Action版本永远不必更改。

另一种选择是创建一个ToFunc转换例程,并将责任放在您的调用者身上,将其操作更改为func:

public static Func<TIn, TResult> ToFunc<TIn, TResult>(this Action<TIn> a)
{
    return input =>
    {
        a(input);
        return default(TResult);
    };
}