[英]C# error casting an object to a generic interface
我有以下代碼。 我無法將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);
}
}
該轉換僅在以下情況下有效:
Search
方法的對象屬於實現IGenericSearchProcessor<T>
的類型,並且 IGenericSearchProcessor<T>
實現ISearchProvider
。 您的代碼顯示IGenericSearchProcessor<T>
實現ISearchCriteria
,而不是ISearchProvider
。 如果您只是將參數轉換為IGenericSearchProcessor<T>
,那么我建議您僅設置參數的類型:
public Task<ISearchResponse> Search(IGenericSearchProcessor<T> provider, T criteria) {
...
}
這樣做可能會顯示其他代碼可能在哪里出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.