c# - 如何链接接受 Func<> 委托(delegate)的方法重载? (C#)

标签 c# generics delegates predicate

我有一个有两个重载的方法,如下所示:

bool Evaluate(Func<bool> condition)
{
    // Some logic

    return condition.Invoke();
}

bool Evaluate<T>(Func<T, bool> condition, T value)
{
    // Same logic as the first method overload

    return condition.Invoke(value);
}

由于两个方法重载都包含基本相同的逻辑,我希望将它们链接在一起,但我不知道如何做到这一点。我想第一个方法过载需要构造一个它传递给第二个重载的委托(delegate),但不清楚这个委托(delegate)应该采用什么形式。

非常感谢您的建议,

蒂姆

最佳答案

试试这个(你不需要调用 Invoke ):

bool Evaluate(Func<bool> condition) {
  // logic ...
  return condition();
}

bool Evaluate<T>(Func<T, bool> condition, T value) {
  return Evaluate(() => condition(value));
} 

或者也许你的逻辑是可重用的,用它自己的方法提取它可能是有意义的:
bool Evaluate(Func<bool> condition) {
  Logic();
  return condition();
}

bool Evaluate<T>(Func<T, bool> condition, T value) {
  Logic();
  return condition(value);
}

void Logic() {
  // logic...
} 

关于c# - 如何链接接受 Func<> 委托(delegate)的方法重载? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979307/

相关文章:

c# - DLL 重定向 - 内部版本号不匹配

c# - 如何从表示为 float 组的高度图创建 3D 网格

C# 泛型类,带有具有另一个类型属性的泛型集合

C# 泛型委托(delegate)的异步调用

c# - 检测点击标签,在 ViewCell 内,在 ListView 内

c# - 什么是 TypeAttributes.NotPublic?

java - 如何从 Eclipse 中的通用接口(interface)导航到实现类?

java - 在三元中使用无界泛化静态函数时如何避免未经检查的强制转换?

iOS:如何处理已释放的委托(delegate)

c# - 简化后台 worker 的匿名方法