簡體   English   中英

C#將對象強制轉換為通用接口時出錯

[英]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);
    }
}

該轉換僅在以下情況下有效:

  1. 傳遞給您的Search方法的對象屬於實現IGenericSearchProcessor<T>的類型,並且
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM