如何组合多个 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();
如何组合多个 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();