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

能否让编译器通过赋值目标类型推导泛型函数的返回类型?

C#泛型方法类型推断问题解答

在C#里,你这种场景完全可以省略泛型类型参数,编译器会自动通过变量的预期类型推断出泛型参数T的具体类型。

具体说明

当你把泛型方法的返回值赋值给一个类型明确的变量(比如示例里的bool guessTheType),C#编译器会根据这个变量的类型,自动推导出barFun<T>里的T是bool,所以直接写bool guessTheType = barFun();是完全合法的,编译器会正确识别并执行。

验证示例

你的代码可以直接运行,编译器会把T推断为bool,barFun内部会遍历列表找到true这个bool类型元素并返回,最终guessTheType的值就是true。

如果显式指定泛型类型,写法是bool guessTheType = barFun<bool>();,这和省略后的效果完全一致,只是前者是手动指定,后者是编译器自动推断。

注意事项

  • 如果没有明确的目标类型(比如直接写barFun();不赋值给变量),编译器无法推断T的类型,这时必须显式指定泛型参数,否则会报编译错误。
  • 要确保泛型方法内部逻辑能找到对应类型的元素,否则会触发示例里的Exception。

完整代码示例

public void fooFun()
{
    // 省略泛型类型参数,编译器自动推断T为bool
    bool guessTheType = barFun();
}

private T barFun<T>()
{
    List<Object> objects = new List<Object>();
    objects.Add(2);
    objects.Add("a");
    objects.Add(true);

    foreach (var obj in objects)
    {
        if (obj.GetType() == typeof(T))
        {
            return (T)obj;
        }
    }

    throw new Exception();
}

内容的提问来源于stack exchange,提问作者Shuumi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:00