C# 具有索引的for循环或foreach中的#c(ArrayList)中的集合

C# 具有索引的for循环或foreach中的#c(ArrayList)中的集合,c#,arraylist,collections,C#,Arraylist,Collections,C#对我来说是新的,我正在尝试迭代一个集合,在本例中,我尝试了我的一个类的ArrayList,我经常在Java中使用它。目标是循环和比较ArrayList,并获得当前位置的索引 为什么不能用类型启动ArrayList ArrayList myAL=new ArrayList() 为什么我不能键入ArrayList来访问MyClass的公共方法 与Java不同,C#中的ArrayList不是泛型的。如果需要类型参数,应使用System.Collections.Generic命名空间中的List列表

C#对我来说是新的,我正在尝试迭代一个集合,在本例中,我尝试了我的一个类的ArrayList,我经常在Java中使用它。目标是循环和比较ArrayList,并获得当前位置的索引

  • 为什么不能用类型启动ArrayList
  • ArrayList myAL=new ArrayList()

  • 为什么我不能键入ArrayList来访问MyClass的公共方法
  • 与Java不同,C#中的
    ArrayList
    不是泛型的。如果需要类型参数,应使用
    System.Collections.Generic
    命名空间中的
    List
    <代码>列表
  • 实际上比
    数组列表
    更受欢迎-后者仍然存在,主要是为了向后兼容 但是如果您需要直接访问索引,我建议您使用一个简单的
    for
    -循环

  • 与Java不同,C#中的
    ArrayList
    不是泛型的。如果需要类型参数,应使用
    System.Collections.Generic
    命名空间中的
    List
    <代码>列表实际上比
    数组列表
    更受欢迎-后者仍然存在,主要是为了向后兼容

  • 但如果您需要直接访问索引,我建议您使用一个简单的
    for
    -循环。

    foreach
    使用枚举器循环集合,索引不是集合的一部分,而是使用
    MoveNext
    <代码>移动下一个强制循环移动到下一个对象

    假设列表是这样的

    List<MyClass> list = new List<MyClass>();
    
    然后使用
    for
    循环在ListNumerator上迭代

      for(var i = 0; listEnumerator.MoveNext() == true; i++ )
      {
          Console.WriteLine("Index: {0}  and value is: {1}", i, listEnumerator.Current);
      }
    
    输出

    Index: 0 and value is: value1 
    Index: 1 and value is: value2
    

    foreach
    使用枚举器循环集合,索引不是集合的一部分,而是使用
    MoveNext
    <代码>移动下一个强制循环移动到下一个对象

    假设列表是这样的

    List<MyClass> list = new List<MyClass>();
    
    然后使用
    for
    循环在ListNumerator上迭代

      for(var i = 0; listEnumerator.MoveNext() == true; i++ )
      {
          Console.WriteLine("Index: {0}  and value is: {1}", i, listEnumerator.Current);
      }
    
    输出

    Index: 0 and value is: value1 
    Index: 1 and value is: value2
    

    使用
    List
    而不是过时的
    ArrayList
    您应该使用从网络历史开始就作为非类型集合存在的List not ArrayList。如果您编写((MyClass)myAL[i]),则第二个示例将有效。getSomeValue();使用
    List
    而不是过时的
    ArrayList
    您应该使用从网络历史开始就作为非类型集合存在的List not ArrayList。如果您编写((MyClass)myAL[i]),则第二个示例将有效。getSomeValue();
    var listEnumerator  =  list.GetEnumerator();
    
      for(var i = 0; listEnumerator.MoveNext() == true; i++ )
      {
          Console.WriteLine("Index: {0}  and value is: {1}", i, listEnumerator.Current);
      }
    
    Index: 0 and value is: value1 
    Index: 1 and value is: value2