我正在尝试构建的确切代码:
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/