6

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

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

        IEnumerable<T> GetRooms();
    }

我收到此错误:无效方差:类型参数“T”必须在“MapLibrary.IMapContainer.GetRooms()”上始终有效。“T”是协变的。

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

4

1 回答 1

7

确保您不是针对旧的框架版本。IEnumerable<T>从 .NET 4 开始是协变的。您的代码在 .NET 4 下编译良好,但由于您在 .NET 3.5 上提到的错误而失败。

于 2012-08-13T19:41:00.060 回答