我要构建的确切代码:

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

        IEnumerable<T> GetRooms();
    }

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

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

最佳答案

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

关于c# - 为什么这是无效的方差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11941080/

10-10 11:49