C#9中如何为Action<T>单个参数命名(无需自定义委托)
解决C#9中Action单个参数添加命名的问题
针对Unity2021对应的C#9版本,无法直接用单个元素的命名元组(会触发CS8124错误),这里提供两种无需自定义委托的简洁实现方式:
方式一:带丢弃元素的命名元组
通过给元组添加一个无意义的丢弃元素(用下划线_标识),绕开单个元素元组的语法限制,同时保留参数名称的可读性:
public async void WaitUntilAbleToGetValue(Action<(float value, _)> then) { // 模拟异步等待与值获取逻辑 float myValue = 123f; await Task.Delay(1000); then?.Invoke((value: myValue, _: default)); }
调用时可以直接通过命名参数访问目标值,丢弃元素无需处理:
WaitUntilAbleToGetValue(result => { Debug.Log($"获取到的数值:{result.value}"); });
方式二:普通Action + 显式命名与注释
使用标准的Action<T>委托,通过XML注释明确参数含义,同时在调用委托时使用命名参数,回调中显式指定参数名称提升可读性:
/// <param name="then">回调参数:<paramref name="value"/> - 异步获取到的目标数值</param> public async void WaitUntilAbleToGetValue(Action<float> then) { float myValue = 123f; await Task.Delay(1000); then?.Invoke(value: myValue); }
调用时可以清晰定义回调参数的名称:
WaitUntilAbleToGetValue((float value) => { Debug.Log($"获取到的数值:{value}"); });
两种方式各有优劣:第一种在委托定义阶段就明确了参数含义,无需依赖注释;第二种更简洁,没有冗余元素,适合追求代码精简的场景。
内容的提问来源于stack exchange,提问作者HarvesteR
相关产品推荐
相关产品推荐

