因此,如果我想在回调中包含多个参数,我可以使用值元组为它们命名(用于上下文),同时仍然使用通用 Action
像这样:
public async void WaitUntilAbleToGetValue(Action<(float value, float timeSpentWaiting)> then)
{
// await something that takes a while, keep track of time spent waiting
// get value
then?.Invoke((value: myValue, timeSpentWaiting: myTimeElapsed));
}
这很棒,因为它允许我们以非常简略的方式向这些操作参数添加上下文。无需声明自定义委托或结构类型...就这样。
所以我尝试对单个参数执行相同的操作...并且我收到错误 CS8124 说元组必须至少有两个元素...所以
Action<(T myValue)>
显然不起作用...这是一个真是耻辱。
(仅供参考,这是 C# 9 iirc.. 这是 Unity 2021 使用的)
所以我想在这里问,是否有人知道如何命名这样的回调参数,而不必经历声明自定义委托类型之类的麻烦。
是的,我很懒。是的,我正在寻找那种甜蜜的语法糖。
提前致谢!
干杯
如果您正在寻找一种在不定义特殊委托或结构的情况下向单个回调参数添加上下文的方法,您可能会考虑的一种方法是使用命名参数。
第一种方法:
public async void WaitUntilAbleToGetValue(Action<float> then)
{
// await something that takes a while, keep track of time spent waiting
// get value
then?.Invoke(myValue); // Here, 'myValue' is the argument name for clarity
}
当调用WaitUntilAbleToGetValue时:
WaitUntilAbleToGetValue(value => DoSomethingWithValue(value));
第二种方法:
public async void WaitUntilAbleToGetValue(Action<KeyValuePair<string, float>> then)
{
// await something that takes a while, keep track of time spent waiting
// get value
then?.Invoke(new KeyValuePair<string, float>("myValue", myValue));
}