0

戻ろうとしていIEnumerable<IMyInterface>ます。MyClass:IMyInterface関数から返すクラスがあります。

IEnumerable<IMyInterface> test() {
    tmpList = new List<MyClass>();
    tmp1 = new MyClass();
    tmp2 = new MyClass();
    tmpList.Add(tmp1);
    tmpList.Add(tmp2);
    return tmpList;
}

MyClass:MyInterface. コンパイラは次の行に沿ってエラーを出します'cannot implicitly convert type System.Collections.Generic.IEnumerable<MyClass> to System.Collections.Generic.IEnumerable<IMyInterface. An explicit conversion exists. Are you missing a cast?'

(IEnumerable<IMyInterface>)tmp実行時にキャスト例外なしでリターンを実行できません。私は何が欠けていますか?インターフェイスの IEnumerable を返すと正常に動作するはずです。

4

2 に答える 2

5

これを行う必要があります:

IEnumerable<IMyInterface> test() {
    tmpList = new List<IMyInterface>();  // this is the important bit
    tmp1 = new MyClass();
    tmp2 = new MyClass();
    tmpList.Add(tmp1);
    tmpList.Add(tmp2);
    return tmpList;
}

または、次のようにすることもできます。

return tmpList.Cast<IMyInterface>(); // requires using System.Linq in usings
于 2012-09-22T23:51:54.877 に答える
2

yield returnのみの代わりに使用しreturnます。これにより、単純なオブジェクトがオブジェクトの列挙に変わります!

IEnumerable<IMyInterface> test() {
    yield return new MyClass();
    yield return new MyClass();
    yield return new MyClass();
}

インターフェイスを実装する 3 つのオブジェクトの列挙を作成します。


編集:

または、メソッドの戻り値の型を変更して、1 つのアイテムを返すようにします。

IMyInterface test() {
    return new MyClass();
}
于 2012-09-22T23:23:29.890 に答える