Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回通用<;对象>;在实现中不强制转换到对象的接口方法上的集合_C#_Oop_Generics_Interface - Fatal编程技术网

C# 返回通用<;对象>;在实现中不强制转换到对象的接口方法上的集合

C# 返回通用<;对象>;在实现中不强制转换到对象的接口方法上的集合,c#,oop,generics,interface,C#,Oop,Generics,Interface,我正在考虑以一种通用/标准化的方式向我的WCF Restful Web服务添加一些基本的搜索和过滤功能 其思想是,客户端将向任何容器资源(即/用户或/会话)发布搜索请求,然后服务器应为搜索结果构造一个uri并重定向到它们(POST redirect GET模式) 我认为我需要这样做(接受建议)的方式是,每个可搜索资源都应该实现我定义的接口。然后,该资源可以与我将创建的通用实用程序一起使用,以使这只需要几行代码即可实现 我提出的界面是: public interface ISearchable {

我正在考虑以一种通用/标准化的方式向我的WCF Restful Web服务添加一些基本的搜索和过滤功能

其思想是,客户端将向任何容器资源(即/用户或/会话)发布搜索请求,然后服务器应为搜索结果构造一个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);
}
公共接口是可实现的
{
ChunkedList GetAll(int chunkStart,int chunkEnd);
ChunkedList SearchByValue(字符串searchValue、int chunkStart、int chunkEnd);
ChunkedList SearchByValueWithFilters(字符串搜索值、列表过滤器、int-chunkStart、int-chunkEnd);
}
其思想是,实现此接口的任何资源都可以进行优化搜索并限制结果集(分块列表具有对象集合和上一个/下一个分块uri)

我遇到的问题是,接口上有一个泛型
ChunkedList
,但实际实现希望返回
ChunkedList
ChunkedList
等,这给了我一个无效的强制转换异常

我知道我可以使用list.convert手动将每个项强制转换为对象,但每个实现都必须这样做,这将是一件痛苦的事情

是否有更合适的接口或OO模式用于此?例如,我可以用基类实现一些“更干净”的东西,并从中派生出可搜索的资源吗?

公共接口是可搜索的
{
ChunkedList GetAll(int chunkStart,int chunkEnd);
ChunkedList SearchByValue(字符串searchValue、int chunkStart、int chunkEnd);
ChunkedList SearchByValueWithFilters(字符串搜索值、列表过滤器、int-chunkStart、int-chunkEnd);
}
类myClass:ISearchable
{
ChunkedList GetAll(int chunkStart,int chunkEnd);
ChunkedList SearchByValue(字符串searchValue、int chunkStart、int chunkEnd);
ChunkedList SearchByValueWithFilters(字符串搜索值、列表过滤器、int-chunkStart、int-chunkEnd);
}
公共接口可启动
{
ChunkedList GetAll(int chunkStart,int chunkEnd);
ChunkedList SearchByValue(字符串searchValue、int chunkStart、int chunkEnd);
ChunkedList SearchByValueWithFilters(字符串搜索值、列表过滤器、int-chunkStart、int-chunkEnd);
}
类myClass:ISearchable
{
ChunkedList GetAll(int chunkStart,int chunkEnd);
ChunkedList SearchByValue(字符串searchValue、int chunkStart、int chunkEnd);
ChunkedList SearchByValueWithFilters(字符串搜索值、列表过滤器、int-chunkStart、int-chunkEnd);
}

我刚刚看到了这一点-我想这就是我想要的,一个通用接口,但要让实现定义类型。这在c#中可能吗?
ChunkedList
非常无用。尝试将其设置为可访问的,
ChunkedList
,以保持内容的通用性。谢谢!我不知道我可以定义这样的通用接口:)如果你想把它作为一个答案发布,我会接受你的第一个答案,否则我会标记Yochai的答案。你可以继续接受Yochai的答案。他有一个很好的例子:)我刚刚看到了这一点-我想这就是我想要的,一个通用接口,但是让实现定义类型。这在c#中可能吗?
ChunkedList
非常无用。尝试将其设置为可访问的,
ChunkedList
,以保持内容的通用性。谢谢!我不知道我可以定义这样的通用接口:)如果你想把它作为一个答案发布,我会接受你的第一个答案,否则我会标记Yochai的答案。你可以继续接受Yochai的答案。他有一个很好的例子:)