You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:33:32