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

C#中如何约束泛型参数为任意带有<T>的类型?

解决泛型参数约束为任意带指定泛型参数类型的问题

你写的代码报错,是因为C#语法不支持where TGeneric: class<T>这种约束——这里的class关键字仅用于限定TGeneric为引用类型,没法表示“接受T作为泛型参数的类/接口”。

要实现“让TGeneric是任意带有的泛型类型(类或接口均可)”的需求,可以按以下步骤操作:

  1. 定义一个基础泛型接口,作为所有目标类型的统一标记:
public interface IGenericWithArg<T> { }
  1. 让所有你需要支持的泛型类型(无论是类还是接口)实现这个基础接口:
// 示例泛型类
public class MyGenericClass<T> : IGenericWithArg<T> { }

// 示例泛型接口
public interface IMyGenericInterface<T> : IGenericWithArg<T> { }
  1. 修改方法的泛型约束,将TGeneric限制为实现了上述基础接口的类型:
public void SetSomeValue<TGeneric, T>(
    ClassA<TGeneric> myObjectA, T value)
    where TGeneric : IGenericWithArg<T>
{
    // 方法逻辑
}

这样,任何实现了IGenericWithArg<T>的泛型类型(类或接口)都可以作为TGeneric传入,不再局限于特定的IGenericType<T>。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:10:46