我正在尝试构建的确切代码:
public interface IMapContainer<out T> where T : MapRoomBase
{
String GetName();
IEnumerable<T> GetRooms();
}
我收到此错误: 方差无效:类型参数“T”必须在“MapLibrary.IMapContainer.GetRooms()”上无效。 'T'是协变的。
我认为这是有效的,因为IEnumerable只返回项目,并且不能添加任何项目。为什么这不安全+有效?
答案 0 :(得分:7)
确保您没有定位旧的框架版本。 IEnumerable<T>
从.NET 4开始是协变的。您的代码在.NET 4下编译得很好,并且在.NET 3.5上提到的错误就失败了。