如何绕过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

我该如何解决这个问题?

如何绕过C#没有';是否允许void作为通用参数

我建议你改变你的设计模式;首先,您应该构建一个不返回任何内容的非泛型Request类,并且继承泛型Request<T>Request<T1, T2>Request<T1, T2, T3>等。

这是一个常见的问题,因为C#等语言变得更加面向功能。

Rx团队通过引入Unit解决了这个问题。

泛型用于类型化参数。如果参数没有类型,请使用接口或来自另一个类的抽象(您的请求也将从中继承(