我有以下代码。我无法将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);
}
}
答案 0 :(得分:0)
该投射仅在以下情况下有效:
conda install matplotlib==3.0.2 (or pip install matplotlib==3.0.2)
方法的对象是实现Search
的类型,并且IGenericSearchProcessor<T>
实现IGenericSearchProcessor<T>
。您的代码显示ISearchProvider
实现了IGenericSearchProcessor<T>
,而不是ISearchCriteria
。如果您只是要将参数转换为ISearchProvider
,那么我建议您仅设置参数的类型:
IGenericSearchProcessor<T>
这样做可能会显示其他代码可能在哪里出错。