";强制“;符合通用约束
本文关键字:约束 quot 强制 | 更新日期: 2023-09-27 18:21:36
我有一个类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() { }
}
有人能想到一种方法吗?我可以在不添加匹配约束的情况下在TargetMaker中实现我想要的东西,同时将所有逻辑保留在TargetMaker类中?
您介意使用反射吗?如果不是:
if (typeof(T).IsClass)
{
Type targetType = typeof(Target<>).MakeGenericType(typeof(T));
return Activator.CreateInstance(targetType);
}
...
如果性能是一个问题,那么可能有一些方法可以优化它,比如通过表达式树构建工厂委托,并缓存它们。如果性能不是问题,那将是一个很大的麻烦:)