我不清楚为什么以下代码片段不是协变的?
public interface IResourceColl<out T> : IEnumerable<T> where T : IResource {
int Count { get; }
T this[int index] { get; }
bool TryGetValue( string SUID, out T obj ); // Error here?
}
错误 1 无效方差:类型参数“T”必须在“IResourceColl.TryGetValue(string, out T)”上始终有效。“T”是协变的。
我的界面只在输出位置使用模板参数。我可以轻松地将这段代码重构为类似
public interface IResourceColl<out T> : IEnumerable<T> where T : class, IResource {
int Count { get; }
T this[int index] { get; }
T TryGetValue( string SUID ); // return null if not found
}
但我试图了解我的原始代码是否真的违反了协方差,或者这是否是编译器或 .NET 对协方差的限制。