2012-01-11 6 views
1

私は、次のインターフェイス定義を持っている:無効な分散

public interface IResEnume<out TModel> : IEnumerable<TModel> where TModel : IModel 
{ 
} 

IModelをが

public interface IModel 
{ 
    int Id { get; } 
} 

ここでターゲットフレームワークが.NET 4.

である私がしようとしているとき、これは正常に動作しますクラスライブラリをWindows Phone 7.1に移植します。

これを行うとき、私は次のエラーを取得する:

Invalid variance: The type parameter 'TModel' must be invariantly valid >on 'System.Collections.Generic.IEnumerable'. 'TModel' is covariant.

私はその行のコンパイルが、その後、私は他のエラーどこかを取得する「外」削除した場合。

+0

私はあなたに共分散問題があると思います... http://msdn.microsoft.com/en-us/library/dd799517.aspx – CrazyDart

答えて

3

これは、のTパラメータがSilverlightで共変していないためです。私たちは、オブジェクトブラウザで確認でき

Despite the documentation above, the generic type parameter T does not appear to be covariant in Silverlight.

:便利な、MSDNは、他の誰かが同じことを指摘し、それしかし、コミュニティのコンテンツに、共変であると言います。 4 .NET Frameworkの:

.NET 4

注意型宣言はoutを含みます。

また、Windows Phone 7のために:

Silverlight

outは、Windowsの携帯電話IEnumerableではありません。 IEnumerable<T>は、それが共変であることを保証しないため、TModel共変を宣言することはできません。この場合には理由がありません。マイクロソフトは単にそれを更新する必要があります。

EDIT:掘り出した後、「固定」とマークされたMicrosoft Connectのknown issueのように見えます。 Silverlight 5では修正されている可能性があります。 Windows Phoneはまだ使用していません。

+0

ありがとうございました。私はいくつかのリファクタリングをしなければならないと思う。 –