Eri*_*ich 3 c# generics constraints
我有一个Target<T>不能改变的类,带有通用约束.我想可能从没有约束的泛型类构建该类的实例.下面演示了我想要做的意图,但我意识到这段代码不会编译,这typeof(T).IsClass是运行时检查,通用约束是编译时的问题.
public class TargetMaker<T>
{
public object GetTarget()
{
if (typeof(T).IsClass)
{
return new Target<T>();
}
return default(T);
}
}
public class Target<T> where T : class
{
public Target() { }
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以想到一种方法,我可以在TargetMaker中实现我想要的,而不需要为其添加匹配约束,同时保留TargetMaker类中的所有逻辑?
你介意用反射吗?如果不:
if (typeof(T).IsClass)
{
Type targetType = typeof(Target<>).MakeGenericType(typeof(T));
return Activator.CreateInstance(targetType);
}
...
Run Code Online (Sandbox Code Playgroud)
如果性能是一个问题,可能有一些方法可以优化它 - 例如通过表达式树构建工厂代理,以及缓存它们.如果性能不是问题,这将是很麻烦:)