簡體   English   中英

如何鏈接接受Func <>委托的方法重載? (C#)

[英]How to chain method overloads that accept Func<> delegates ? (C#)

我有兩個重載的方法,如下所示:

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);
}

由於這兩種方法重載都包含基本相同的邏輯,因此我希望將它們鏈接在一起,但是我看不到如何做到這一點。 我想第一個方法overoad需要構造一個傳遞給第二個重載的委托,但是尚不清楚該委托應該采用什么形式。

非常感謝您的建議,

提姆

試試這個(您不需要調用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...
} 

像這樣:

bool Evaluate(Func<bool> condition)
{
    return Evaluate(p => condition.Invoke(), false);
}

您的第一個重載不能調用第二個重載,除非您要“補足”要傳遞的值。 不過,您的第二個可以輕松調用第一個。

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

最簡單的方法是將原始的無參數委托包裝為接受和忽略單個參數的委托。

bool Evaluate(Func<bool> condition) 
{ 
    return Evaluate( _ => condition(), 0); 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM