如果T是struct,则我想通过执行一个实现来实现我的通用IQueue<T>
接口,而如果T是类,则实现另一个实现。如果类型参数是结构体或类,则选择泛型实现
interface IQueue<T> { ... }
class StructQueue<T> : IQueue<T> where T : struct { ... }
class RefQueue<T> : IQueue<T> where T : class { ... }
的,我想有一种基于T的一种工厂方法返回一个或一个实例另:
static IQueue<T> CreateQueue<T>() {
if (typeof(T).IsValueType) {
return new StructQueue<T>();
}
return new RefQueue<T>();
}
当然,编译器表明T应当是非分别为可空/可空类型参数。
有没有办法将T转换为struct类型(以及类类型)以使该方法编译?这种运行时调度甚至可以用C#进行吗?
您可以使用Reflection –
请注意,可为空的值类型不会传递,也不会传递'class',也不会传递'struct'约束。你应该有第三个这个案例的实施课。 – PetSerAl