【发布时间】:2018-12-06 14:31:45
【问题描述】:
我有以下代码。我无法将 ISearchProvider 的对象转换为该类已实现的另一个接口。
public interface IGenericSearchProcessor<T> where T: ISearchCriteria
{
Task<ISearchResponse> Search(T criteria);
}
public class GibsonSearchProvider : IGenericSearchProcessor<ISearchCriteria>, IAggregateSearch, ISearchProvider
{
public async Task<ISearchResponse> Search(ISearchCriteria criteria)
{
return new BasicSearchResponse
{
AggregateResults = aggregates
};
}
}
public class GenericSearchStrategy<T> : ISearchStrategy<T> where T : ISearchCriteria
{
public Task<ISearchResponse> Search(ISearchProvider provider, T criteria)
{
//exception here when try to cast.
var p = (IGenericSearchProcessor<T>)provider;
//return ((IGenericSearchProcessor<T>)provider).Search(criteria);
}
}
【问题讨论】:
-
请提供minimal reproducible example。如果转换失败,那么大概提供者没有实际上实现你要转换到的接口...
-
它正在实施。我已经编辑了代码
-
如果你想要一个
IGenericSearchProcessor<T>,那么你应该接受它作为你的参数,而不是你希望也实现该接口的ISearchProvider。 -
您仍然没有提供minimal reproducible example。我们看不到你用什么称呼
Search。恐怕无法重现该问题,我仍然认为您的代码比运行时更有可能存在问题。我建议你在强制转换之前使用调试器中断,并详细检查T和provider是什么。 -
GibsonSearchProvider 类实现了 IGenericSearchProcessor
。我的问题是这个提供者是否可以被强制转换为这个通用接口,因为它已经实现了它?