2012-08-13 15 views
6

正確なコード:なぜこれは無効な分散ですか?私が構築しようとしている

public interface IMapContainer<out T> where T : MapRoomBase 
    { 
     String GetName(); 

     IEnumerable<T> GetRooms(); 
    } 

私はこのエラーを取得しています: 無効な分散を:typeパラメータ「T」「はMapLibrary.IMapContainer.GetRooms()」に不変有効でなければなりません。 'T'は共変数である。

IEnumerableが単にアイテムを返すので、これが有効であるという印象を受けましたが、追加することはできません。なぜこれは安全でない+有効ですか?

+0

申し訳ありませんが、なぜ「out T」ですか?あなたはそれを必要としますか? –

+0

なぜTはあなたのインターフェースのパラメータですか?あなたは何を達成しようとしていますか?私の見解からは、奇妙に見える/間違っている。 –

+1

@ Xtian、Andre、http://msdn.microsoft.com/en-us/library/dd997386.aspx。 –

答えて

7

古いフレームワークのバージョンをターゲットにしていないことを確認してください。 IEnumerable<T>は.NET 4以降では共変です。.NET 4ではコードが正常にコンパイルされ、.NET 3.5でエラーが発生して失敗します。

+0

私は実際にSilverlight 4フレームワークをここにターゲット設定しています。 – Erix

+0

SL4のIEnumerableでは共分散がサポートされていないようです。この回答は私には分かりませんでしたが、なぜこれが... http:// forums.silverlight.net/t/184882.aspx/1 – Erix

+3

共変がSL4でサポートされているのは、IEnumerable のようなBCLタイプは、SL5で共変にしか作られていません。この[SO答え]を参照してください(http://stackoverflow.com/a/2558592/872395) – nemesv

関連する問題