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

如何检查泛型参数是否为Point3D及其派生类型?

解决方案

要检查泛型参数T是否是Point3D或其派生类型,你可以使用Type.IsAssignableFrom方法,代码如下:

private static void Execute<T>(IList<T> points, ...) where T : Point2D
{
    if (typeof(Point3D).IsAssignableFrom(typeof(T))) 
    {
        // 这里处理Point3D及其派生类型的逻辑
    }
}

为什么之前的写法报错?

你写的if (T is Point3D)是错误的,因为T是类型参数,而is运算符是用来判断某个对象实例是否属于指定类型(或其派生类型)的,不能直接用在类型本身上,所以会触发CS0119错误。

补充说明

  • typeof(Point3D).IsAssignableFrom(typeof(T))的含义是:T类型的实例可以赋值给Point3D类型的变量,这就涵盖了T是Point3D本身或者它的派生类的情况。
  • 如果你的方法里有T类型的实例(比如points集合中的元素),也可以通过实例判断:
    if (points.Count > 0 && points[0] is Point3D)
    {
        // 逻辑处理
    }
    
    不过这种方式依赖集合非空,而直接用IsAssignableFrom针对泛型参数类型的检查更直接可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:02:35