次のコードスニペットが共変ではない理由がわかりません。
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、outT)」で常に有効である必要があります。「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の共分散の制限であるかどうかを理解しようとしています。