2013-08-23 55 views
1

找不到方法,我开始认为这是不可能的,但以防万一我会在这里问。通用类型的泛型类访问类型参数

更好地解释代码..

我有这个通用类的定义,我想能够访问List的类型参数,所以我可以定义接受字符串的GenericClassOfGenericType的方法(取自列表的类型参数)

//class definition 
public class GenericClassOfGenericType<TGeneric>{ } 

var instance = new GenericClassOfGenericType<List<string>>(); 

我试过类似的东西;

public class GenericClassOfGenericType<TGeneric<TValue>> { 
public void ProxyAdd(TValue value){ } 
} 

但是,这并不工作,无法找到谷歌类似的事情。

我可以在GenericClassOfGenericType中添加第二个类型定义,并在构造函数中添加一个验证器,以确保泛型列表具有第二个类型作为类型参数,但它根本感觉不太好。

[编辑] 也找不到一个约束,迫使你指定一个泛型类型作为参数(有意义的泛型也是强类型,但它使我认为这是不可能的)。

+0

有什么特别的原因,你需要指定它的“清单”的一部分?为什么不只是'GenericClassOfGenericType '?让它处理它需要的任何“List ”的内部结构。我的意思是,你希望传入List的某个子类或者'ICollection'或'IList'的不同实现吗? –

回答

2

怎么样:

public class GenericClassOfGenericType<TGeneric, TValue> 
    where TGeneric : IList<TValue> 
+0

谢谢,但这是我的最后一个选项,因为它迫使你指定类型参数的类型参数,仍然比在构造函数中检查更好:P –

+0

来自MDSN泛型文档: “类型参数与泛型类的约束非常有用因为编译器可以不考虑类型参数,只是它来自System.Object。使用类型参数作为您希望在两个类型参数之间执行继承关系的场景中的泛型类的约束。 我想这是同样的问题,所以我想我将你的答案标记为解决方案并继续前进。 谢谢。 –