2017-04-06 65 views
0

我在做這個代碼有什麼問題?將引用傳遞給從繼承自接口的類繼承的類

我有一個接口和一個繼承此接口的類。

然後我有另一個類繼承該類。

當我試圖通過這個類作爲參數的方法接受一個List<that interface>我得到以下錯誤:

的「射手最佳重載方法匹配(REF System.Collections.Generic.List < ISearchResult>)」具有一些無效參數

參數1:不能從轉換 'REF System.Collections.Generic.List' 到 'REF System.Collections.Generic.List < ISearchResult>'

這裏是我的接口,類和方法的定義,問題線路編碼:

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 
... 
+0

自從我使用C#以來這已經有一段時間了,所以這可能已經改變了,但我不認爲列表是協變的。你可以讓接口使用'IEnumerable '? –

+0

@EvanTrimboli,謝謝,但只是嘗試IEnumerable和錯誤是一樣的。 – johna

+0

對我運行正常:https://gist.github.com/evantrimboli/b1d61b51e9a2724066cc375471c046c1 –

回答

1

List<T>類型不是協變的,所以你需要選擇其他類型,例如IEnumerable<T>IReadOnlyCollection<T>