如何绕过C#没有';是否允许void作为通用参数
本文关键字:void 参数 是否 何绕过 没有 | 更新日期: 2023-09-27 18:00:48
我有以下通用类,它们处理返回不同类型对象的请求:
class Request<T> {
/* ... */
public T Result { get; protected set; }
public abstract bool Execute();
protected bool ExecuteCore(params /* ... */) { /* ... */ }
}
class ObjectRequest<T> : Request<T>
where T : class, new() { /* ... */ }
class ListRequest<T> : Request<List<T>>
where T : class, new() { /* ... */ }
class CompoundRequest<T, U> : Request<T>
where T : class, IHeader<U>, new()
where U : class, new() { /* ... */ }
class CompoundRequest<T, U, V> : Request<T>
where T : class, IHeader<U>, IHeader<V>, IHeader<W>, new()
where U : class, new()
where V : class, new() { /* ... */ }
class CompoundRequest<T, U, V, W> : Request<T>
where T : class, IHeader<U>, IHeader<V>, new()
where U : class, new()
where V : class, new()
where W : class, new() { /* ... */ }
interface IHeader<T> {
List<T> Details { get; set; }
}
现在我想创建一个类来处理返回no对象的请求。但是,不允许将通用参数设置为null:
class NoReturnRequest : Request<void> { /* ... */ } // illegal
我该如何解决这个问题?
我建议你改变你的设计模式;首先,您应该构建一个不返回任何内容的非泛型Request
类,并且从继承泛型Request<T>
、Request<T1, T2>
、Request<T1, T2, T3>
等。
这是一个常见的问题,因为C#等语言变得更加面向功能。
Rx团队通过引入Unit解决了这个问题。
泛型用于类型化参数。如果参数没有类型,请使用接口或来自另一个类的抽象(您的请求也将从中继承(