返回接口方法上的泛型<object>集合,而不在实现</object>中强制转换为对象

时间:2011-10-08 21:50:51

标签: c# oop generics interface

我正在寻找以通用/标准化方式向我的WCF Restful webservices添加一些基本搜索和过滤功能。

这个想法是客户端将SearchRequest发布到任何容器资源,即/ users或/ sessions - 然后服务器应该构建一个uri到搜索结果并重定向到它们(POST-Redirect-GET模式)。

我认为我需要这样做(开放给建议)是每个可搜索的资源应该实现我定义的接口。然后,该资源可以与我将创建的通用实用程序一起使用,以便只实现几行代码。

我提出的界面是:

public interface ISearchable
{
    ChunkedList<object> GetAll(int chunkStart, int chunkEnd);

    ChunkedList<object> SearchByValue(string searchValue, int chunkStart, int chunkEnd);

    ChunkedList<object> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd);
}

实现此接口的任何资源都可以执行优化搜索并限制结果集(分块列表包含对象集合,以及prev / next chunk uri)。

我遇到的问题是接口上有一个泛型ChunkedList<object>,但实际的实现想要返回ChunkedList<User>ChunkedList<Session>等等,这给了我一个无效的强制转换异常。

我知道我可以使用list.convert手动将每个项目转换为一个对象,但是每个实现都必须这样做。

是否有更适合的接口或OO模式?例如,我可以使用基类实现“更干净”的东西并从中获取可搜索的资源吗?

1 个答案:

答案 0 :(得分:1)

public interface ISearchable<T>
{
    ChunkedList<T> GetAll(int chunkStart, int chunkEnd);

    ChunkedList<T> SearchByValue(string searchValue, int chunkStart, int chunkEnd);

    ChunkedList<T> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd);
}

class myClass: ISearchable<myClass>
{
   ChunkedList<myClass> GetAll(int chunkStart, int chunkEnd);

   ChunkedList<myClass> SearchByValue(string searchValue, int chunkStart, int chunkEnd);

   ChunkedList<myClass> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd);
}