C#将对象强制转换为通用接口时发生错误

时间:2018-12-06 14:31:45

标签: c# oop interface casting

我有以下代码。我无法将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 个答案:

答案 0 :(得分:0)

该投射仅在以下情况下有效:

  1. 传递给您的 conda install matplotlib==3.0.2 (or pip install matplotlib==3.0.2) 方法的对象是实现Search的类型,并且
  2. IGenericSearchProcessor<T>实现IGenericSearchProcessor<T>。您的代码显示ISearchProvider实现了IGenericSearchProcessor<T>,而不是ISearchCriteria

如果您只是要将参数转换为ISearchProvider,那么我建议您仅设置参数的类型:

IGenericSearchProcessor<T>

这样做可能会显示其他代码可能在哪里出错。