1

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

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 也必须相应地改变。有没有办法消除重复代码?

谢谢,吉姆

4

1 回答 1

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);
    };
}
于 2013-07-24T02:46:50.627 回答