为什么以下DisplayContents对于ArrayList不起作用(不会编译),因为它继承了IEnumerable的形式)
public class Program
{
static void Main(string[] args)
{
List<int> l = new List<int>(){1,2,3};
DisplayContents(l);
string[] l2 = new string[] {"ss", "ee"};
DisplayContents(l2);
ArrayList l3 = new ArrayList() { "ss", "ee" };
DisplayContents < ArrayList>(l3);
Console.ReadLine();
}
public static void DisplayContents<T>(IEnumerable<T> collection)
{
foreach (var _item in collection)
{
Console.WriteLine(_item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
ArrayList实现IEnumerable,但不是通用的IEnumerable<T>.这是预期的,因为ArrayList它既不是通用的,也不是任何特定类型的约束.
你需要你的参数类型改变DisplayContents方法,从IEnumerable<T>到IEnumerable并删除其类型参数.您的收藏品将被传递给Console.WriteLine,可以接受任何object.
public static void DisplayContents(IEnumerable collection)
{
foreach (var _item in collection)
{
Console.WriteLine(_item);
}
}
Run Code Online (Sandbox Code Playgroud)