传递对从继承自接口的类继承的类的引用

时间:2017-04-06 00:47:42

标签: c#

这段代码我做错了什么?

我有一个接口,以及一个继承此接口的类。

然后我有另一个继承自该类的类。

当我尝试将此类作为参数传递给接受List<that interface>的方法时,我收到以下错误:

  

'Scorer(ref System.Collections.Generic.List&lt; ISearchResult&gt;)'的最佳重载方法匹配有一些无效的参数

     

参数1:无法从'ref System.Collections.Generic.List'转换为'ref System.Collections.Generic.List&lt; ISearchResult&GT;'

这是我的界面,类和方法定义,以及编码的问题行:

public interface ISearchResult
{
    double SearchScore { get; set; }
    string SearchIndex { get; set; }
}

public class SearchResult : ISearchResult
{
    public double SearchScore { get; set; }
    public virtual string SearchIndex { get; set; }
}

public class MyData : SearchResult
{
    public int ID { get; set; }
    public string Title { get; set; }
    public override string SearchIndex { get; set; }
}

public void Scorer(ref List<ISearchResult> results)
{
    ...

...
List<MyData> myResults = q.ToList();
search.Scorer(ref myResults); //line with the errors
...

1 个答案:

答案 0 :(得分:1)

List<T>类型不是协变的,因此您需要选择其他类型,例如IEnumerable<T>IReadOnlyCollection<T>