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

C#10泛型方法中如何基于泛型参数T的类型实现switch匹配

报错原因

你当前switch的判断对象是typeof(T),它返回的是System.Type类的实例,而你写的case Axis axis:是用来匹配「值本身为Axis类型实例」的模式,两者类型完全不匹配,因此触发编译报错。

正确实现方案

方案1:基于Type实例匹配(兼容原有写法逻辑)

直接在case中加入类型判断的when子句即可:

public T GetAxis<T>(object axisObject)
{
    switch (typeof(T))
    {
        case Type t when t == typeof(Axis):
            // 执行对应逻辑,示例为直接转换返回
            return (T)axisObject;
        // 其他类型分支按相同格式添加即可
        case Type t when t == typeof(string):
            return (T)(object)axisObject.ToString();
        default:
            throw new NotSupportedException($"暂不支持{typeof(T).Name}类型的匹配");
    }
}

方案2:泛型模式匹配(C# 10+推荐,无反射性能更好)

不需要反射获取Type实例,直接基于泛型类型做模式匹配,运行效率更高:

public T GetAxis<T>(object axisObject)
{
    return default switch
    {
        Axis => (T)axisObject,
        // 其他类型分支按相同格式添加即可
        int => (T)(object)Convert.ToInt32(axisObject),
        _ => throw new NotSupportedException($"暂不支持{typeof(T).Name}类型的匹配")
    };
}

如果编译器版本较低无法自动推断default的类型,把default改为default(T)即可正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:02