为什么这是一个无效的方差?

Eri*_*rix 6 c# covariance silverlight-4.0

我正在尝试构建的确切代码:

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

        IEnumerable<T> GetRooms();
    }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:方差无效:类型参数"T"必须在"MapLibrary.IMapContainer.GetRooms()"上无效.'T'是协变的.

我认为这是有效的,因为IEnumerable只返回项目,并且不能添加任何项目.为什么这不安全+有效?

Jul*_*ain 7

确保您没有定位旧的框架版本.IEnumerable<T>从.NET 4开始是协变的.你的代码在.NET 4下编译得很好,并且在.NET 3.5上提到的错误就失败了.

  • SL4支持协方差,只有像IEnumerable <T>这样的BCL类型才能在SL5中使用Covariant看到这个[SO回答](http://stackoverflow.com/a/2558592/872395) (3认同)