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

.NET 6中能否定义返回类型固定、参数任意的C#委托?

解答:无法直接声明不限参数但固定返回类型的委托

核心结论

在C#(包括.NET 6)中,不存在语法支持直接声明仅固定返回类型、完全不限制输入参数数量/类型的委托类型。C#的委托是强类型结构,必须在声明时明确参数的数量、类型和顺序,没有“任意参数”的模糊定义方式。

为什么你的设想无法实现

  • C#委托的声明规则要求必须明确参数列表的结构,你设想的EvaluationDelegate<T>这种“任意参数”的形式不符合语言规范。
  • 你当前使用的Delegate是所有委托的基类,但它属于弱类型,这也是代码失去编译期类型检查、泛型优势的根本原因。

.NET 6下的可行替代方案

虽然不能直接实现目标委托,但可以通过重载不同参数数量的泛型方法,结合C#的类型推断特性,解决你遇到的调用时的类型推断问题:

1. 为ComplexObject添加多参数重载的Evaluate方法

针对常用的参数数量(比如0到5个),重载Evaluate<T>方法,使用Func<TArg..., TResult>作为参数类型:

public class ComplexObject
{
    public T Evaluate<T>(Func<T> method)
    {
        var parameters = DoMagicToGetTheParameterValues(method);
        var obj = method.DynamicInvoke(parameters);
        return CustomConvertTo<T>(obj);
    }

    public T Evaluate<T, T1>(Func<T1, T> method)
    {
        var parameters = DoMagicToGetTheParameterValues(method);
        var obj = method.DynamicInvoke(parameters);
        return CustomConvertTo<T>(obj);
    }

    public T Evaluate<T, T1, T2>(Func<T1, T2, T> method)
    {
        var parameters = DoMagicToGetTheParameterValues(method);
        var obj = method.DynamicInvoke(parameters);
        return CustomConvertTo<T>(obj);
    }

    // 可继续扩展至更多参数,比如T3、T4,覆盖绝大多数业务场景
}

2. 调用时的类型推断优化

现在调用者传入匿名函数时,编译器会自动根据参数的类型推断泛型参数,无需手动指定:

var instance = GetComplexObject();

// 单参数场景:自动推断T=string,T1=SimpleEntity
var name = instance.Evaluate<string>((SimpleEntity simple) => 
{
    return simple.Name ?? simple.ToString();
});

// 双参数场景:自动推断T=int,T1=User,T2=Order
var total = instance.Evaluate<int>((User u, Order o) => 
{
    return u.Points + o.Amount;
});

3. 处理类型推断边缘场景

如果遇到编译器无法自动推断参数类型的情况(比如参数为object),只需显式指定匿名函数的参数类型即可,无需手动指定泛型参数:

var totalValue = instance.Evaluate<decimal>((object data1, object data2) => 
{
    return Convert.ToDecimal(data1) + Convert.ToDecimal(data2);
});

.NET 7+的补充说明

在.NET 7及更高版本,编译器的类型推断能力有所提升,但核心依然无法实现“任意参数的委托”,不过重载方法的调用体验会更流畅,部分复杂场景的推断成功率更高。


内容的提问来源于stack exchange,提问作者Donald.Record

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:40