有问题。我有一堂课First
。我正在尝试在模板 T 上编写一个方法,当我尝试返回 List 时出现错误:
“IEnumerable”不包含“ToList”的定义,并且最佳扩展方法重载“Enumerable.ToList(IEnumerable)”需要“IEnumerable”类型的接收器
我不明白为什么会这样。毕竟 Enumerable 有 toList 为什么不能选择我要输出的类型呢?还是没有显式类型转换就不可能?
这是我的代码示例:
class Program
{
List<First> fl = new List<First>();
static void Main(string[] args)
{
}
public List<T> GetF<T>() where T : First
{
return fl.Where(a => a is T).ToList<T>();
}
}
public class First
{
public int Age { get; set; }
}
看,你有 T : First,即 T 是 First,也就是说,在一般情况下,可以有 First 的任何后代。你听到我在说什么了吗?如果 T :首先,那么通常情况相反:首先不是 T。所以编译器不能做你想做的事。您需要显式提升类型:
,或者,相同,只是更短: