如果我有以下通用类:
public class Gen<T>
{
public T Value { get; set; }
}
使用它的课程:
public class Thing
{
public Gen<int> GenIntProperty { get; set; }
public Gen<string> GenStringProperty { get; set; }
public string NoGenericProp { get; set; }
}
使用反射,如何仅基于开放泛型类型Gen<T>
的属性,特别是GenIntProperty
和GenStringProperty
?
我已经尝试过各种形式的代码,但由于无法引用开放的泛型类型,我一直在遇到这样的错误。
使用泛型类型&#39; UserQuery.Gen&#39;需要1个类型参数
var genProps = typeof(Thing).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(pi => pi.PropertyType == typeof(Gen));
答案 0 :(得分:3)
您需要获取属性类型的泛型类型定义,并将其与开放泛型类型进行比较:
var genProps = typeof(Thing)
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(pi => pi.PropertyType.IsGenericType && pi.PropertyType.GetGenericTypeDefinition() == typeof(Gen<>));