C#中如何约束泛型参数为任意带有<T>的类型?
解决泛型参数约束为任意带指定泛型参数类型的问题
你写的代码报错,是因为C#语法不支持where TGeneric: class<T>这种约束——这里的class关键字仅用于限定TGeneric为引用类型,没法表示“接受T作为泛型参数的类/接口”。
要实现“让TGeneric是任意带有
- 定义一个基础泛型接口,作为所有目标类型的统一标记:
public interface IGenericWithArg<T> { }
- 让所有你需要支持的泛型类型(无论是类还是接口)实现这个基础接口:
// 示例泛型类 public class MyGenericClass<T> : IGenericWithArg<T> { } // 示例泛型接口 public interface IMyGenericInterface<T> : IGenericWithArg<T> { }
- 修改方法的泛型约束,将TGeneric限制为实现了上述基础接口的类型:
public void SetSomeValue<TGeneric, T>( ClassA<TGeneric> myObjectA, T value) where TGeneric : IGenericWithArg<T> { // 方法逻辑 }
这样,任何实现了IGenericWithArg<T>的泛型类型(类或接口)都可以作为TGeneric传入,不再局限于特定的IGenericType<T>。
内容的提问来源于stack exchange,提问作者asdfasdf
相关产品推荐
相关产品推荐

