最佳答案
我不明白为什么下面的 C # 代码不能编译。
如您所见,我有一个带有 IEnumerable<T>
参数的静态泛型方法 Something (并且 T
被限制为 IA
接口) ,这个参数不能隐式转换为 IEnumerable<IA>
。
解释是什么? (我没有寻找变通方法,只是想知道为什么它不起作用)。
public interface IA { }
public interface IB : IA { }
public class CIA : IA { }
public class CIAD : CIA { }
public class CIB : IB { }
public class CIBD : CIB { }
public static class Test
{
public static IList<T> Something<T>(IEnumerable<T> foo) where T : IA
{
var bar = foo.ToList();
// All those calls are legal
Something2(new List<IA>());
Something2(new List<IB>());
Something2(new List<CIA>());
Something2(new List<CIAD>());
Something2(new List<CIB>());
Something2(new List<CIBD>());
Something2(bar.Cast<IA>());
// This call is illegal
Something2(bar);
return bar;
}
private static void Something2(IEnumerable<IA> foo)
{
}
}
我在 Something2(bar)
行得到的错误:
参数1: 不能从‘ System.Collections.Generic.List’转换 到‘ System. Collections. Generic.IEnumable’