如何组合多个 Func<> 委托

How to combine multiple Func<> delegates

如何组合多个 Func 委托?

假设我有两个代表

Func<bool> MovementButtonHold() => () => _inputSystem.MoveButtonHold
Func<bool> IsFreeAhead() => () => _TPG.IsFreeAhead();

有什么方法可以将这两个代表合并为一个 Func<bool> 代表吗?

类似于:

Func<bool> delegate1 = MovementButtonHold() && IsFreeAhead();

Func<bool> delegate2 = MovementButtonHold() || IsFreeAhead();

在您的代码中,MovementButtonHold 和 IsFreeAhead 不是委托,它们是 return 委托的方法。 因此,要将它们结合起来,您需要这样的东西:

Func<bool> delegate1 = () => MovementButtonHold()() && IsFreeAhead()();
Func<bool> delegate2 = () => MovementButtonHold()() || IsFreeAhead()();

注意上面的 ()() 奇怪的语法。第一个 () 是调用方法和 return 委托,第二个 () 是调用委托 return 布尔结果。然后创建一个内联函数来对输出执行“AND”或“OR”运算,并将内联函数分配给 delegate1 或 delegate2

除非你有理由让 MovementButtonHold 和 IsFreeAhead return 代表你可以简化它们的实现如下简单地 return 布尔结果。

bool MovementButtonHold() => _inputSystem.MoveButtonHold;
bool IsFreeAhead() => _TPG.IsFreeAhead();

Func<bool> delegate1 = () => MovementButtonHold() && IsFreeAhead();
Func<bool> delegate2 = () => MovementButtonHold() || IsFreeAhead();
    Func<bool> MovementButtonHold = () => true;
    Func<bool> IsFreeAhead = () => false;
    
    Func<bool> delegate1 = () => MovementButtonHold() && IsFreeAhead();
    Func<bool> delegate2 = () => MovementButtonHold() || IsFreeAhead();