给定泛型类
class Foo<TData> { }
和具体类型
var type = typeof(Foo<string>) //Fpp`[System.String]
var genericType = type.GetGenericTypeDefinition(); //Foo`1[TData]
我想得到“TData”。或者另一种方式:根据泛型参数名称获取泛型参数的值:
GetGenericArgumentType(typeof(Foo<string>), "TData") //should return System.String
以下是可行的:(这只是为了演示,它假设类型是泛型的,并且参数名称确实存在)
public string GetGenericArgumentType(Type type, string paramName)
{
var genericType = type.GetGenericTypeDefinition();
var genericParam = genericType
.GetGenericArguments()
.Select((t, i) => new { Index = i, t.Name })
.First(arg => arg.Name == paramName);
return type.GetGenericArguments()[genericParam.Index].Name;
}
class GenericFoo<TData, TSecondData> { }
public void GetGenericArgumentTypeTest()
{
string name1 = this.GetGenericArgumentType(
typeof(GenericFoo<string, int>), "TData"); //String
string name2 = this.GetGenericArgumentType(
typeof(GenericFoo<string, int>), "TSecondData"); //Int32
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句