e.g:
泛型参数T
可以包含许多约束:
public Class<T> where T : class, IDisponse, new()
{
}
如何通过反射得到T
的所有约束?
我已经知道了:
var t = typeof(Class<>).GetGenericArguments()[0]
t.IsValueType // should be struct?
t.GetGenericParameterConstraints() // should be IDisponse or other type?
但如何获得其他限制:
答案 0 :(得分:1)
您可以使用Type.GenericParameterAttributes属性:
获取描述的GenericParameterAttributes标志的组合 当前泛型类型的协方差和特殊约束 参数。
即。它返回通用参数约束的按位掩码。例如。如果你想检查是否有new()
约束:
var attributes = t.GenericParameterAttributes;
if ((attributes & GenericParameterAttributes.DefaultConstructorConstraint) != 0)
//....
对于class
约束验证,您应该检查ReferenceTypeConstraint
标志。
答案 1 :(得分:-3)
您是否正在尝试通过反射创建新实例?
使用System.Activator类。
https://msdn.microsoft.com/en-us/library/system.activator(v=vs.110).aspx
T instance = (T)Activator.CreateInstance(typeof(T));