public T getValueByName<T>(String name)
{
if( T is List )
Object containedType = T.WhatGoesHere()?
...
在上面的代码中,我需要知道是否可以将List转换为传入的任何类型的列表,例如List<Control>
。
有没有办法询问包含类型的泛型?我可以List<Control>
,List<String>
,List<Form>
等等。
我可以将API拆分为在传递包含类型的单独方法中返回列表,因此要求调用者对列表使用一种方法,对简单类型使用一种方法。无论哪种方式,他们都必须知道什么会回来,但如果有一种顺利的方式来做我想问的事情,我宁愿保持API的简单。
注意:这是缺乏协方差的解决方案,因为即使在包含的类型上定义了隐式转换运算符,List to T的转换也会失败。因此,为了遵循解决方案listOfB.Cast<A>();
from here,我需要知道要投射什么(什么是A)。
谢谢!
答案 0 :(得分:4)
您可以从typeof(T)
开始,以获取代表System.Type
的{{1}}实例。
完成后,您可以检查T
以查看它是否真的是通用的,然后调用Type.IsGenericType
以查看使用了哪些泛型参数。
例如,如果Type.GetGenericArguments()
为T
List<int>
为IsGenericType
而true
将返回包含一个元素的数组:GetGenericArguments()
< / p>
例如,下面是我编写的一段代码,用于查看给定类型(变量System.Int32
)是否为某些实现,如果type
其中IEnumerable<T>
未知。首先要看看它是否是通用的,然后确定它是否只有一个参数,确定所述参数并查看它是否实现了接口,给定该参数:
T
供参考,见: