ArrayList和IEnumerable查询

Noe*_*oel 1 c#

为什么以下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)

Dou*_*las 7

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)

  • 或者更好的是,不要使用`ArrayList`,因为它是不必要的.如果你真的需要,请使用`List <object>`,答案可能是"不". (3认同)
  • @Douglas:我看到的唯一优势是它实现了`IEnumerable <T>`:)但是,是的,这就是我所说的; 你将/应该只在被你不能控制的API强制使用时使用ArrayList. (3认同)