我输入的是T
,我想检查它是否可以安全地传递到Activator.CreateInstance(T)
。
我想到的是这样做:
if(!T.IsInterface && !T.IsAbstract)
{
instance = (T)Activator.CreateInstance(T);
}
但是:
T.IsInstantiable
或该语言中包含的内容?编辑:否,T
不是来自一般约束。这是一段代码T
来自:
var instances = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(
// some other constraints
).Where(
// can be instantiated, I'm trying to figure this part in my question
).Select(
T => Activator.CreateInstance(T)
);
答案 0 :(得分:1)
如果T
是通用参数,则只需在其上使用new()
约束。这样,编译器将强制执行此操作,而不是运行时