2017-04-06 8 views
0

このコードで何が問題になっていますか?インターフェイスから継承するクラスから継承するクラスへの参照を渡す

私はインターフェイスとこのインターフェイスを継承するクラスを持っています。

次に、そのクラスから継承する別のクラスがあります。

私がしようとすると、私は次のエラーを取得List<that interface>受け取るメソッドへのパラメータとして、このクラスを渡す:

「スコアラー(REF System.Collections.Generic.Listための最良のオーバーロードされたメソッドの試合をREF System.Collections.Generic.List < ISearchResult> '

'から' refのSystem.Collections.Generic.List:< ISearchResultは>「)から変換することはできません

引数1は、いくつかの無効な引数を持っています'ここ

は私のインターフェイス、クラスやメソッドの定義され、符号化の問題行:

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>のために、別のタイプを選択する必要があります。

関連する問題