类型差异让我很头疼。我的印象是out
方差修饰符IEnumerable<out T>
应该允许这种行为。
interface ISampleInterface
{
}
/// <summary>
/// This works great!
/// </summary>
static void GenericMethod<TSeq>(TSeq sequence) where TSeq : IEnumerable<ISampleInterface>
{
UseInterface(sequence);
}
/// <summary>
/// This does not compile :(
/// </summary>
static void GenericMethod<T>(IEnumerable<T> sequence) where T : ISampleInterface
{
UseInterface(sequence);
}
static void UseInterface(IEnumerable<ISampleInterface> item)
{
throw new NotImplementedException();
}
错误是;
错误 CS1503 参数 1:无法从转换
System.Collections.Generic.IEnumerable<T>
为System.Collections.Generic.IEnumerable<ISampleInterface>
为什么GenericMethod<T>
编译失败,但GenericMethod<TSeq>
编译得很好?