none
还有问题!!!ArrayList 相关的几个小问题!问题在注释里! RRS feed

  • 问题

  • namespace 测试动物数列数组
    
    {
    
     class Program
    
     {
    
      static void Main(string[] args)
    
      {
    
       ArrayList animalList = new ArrayList();
    
       Cow cow1 = new Cow("牛哥");
    
       animalList.Add(cow1);
    
       animalList.Add(new Chicken("鸡姐姐") );
    
       //下面这一句我想把animalList数列中的第二个鸡姐姐 定义出来,名叫chicken1
    
       //应该怎么写?下面是我写的,不对!
    
       //Chicken chicken1 = animalList(1);
    
    
    
       foreach (Animal myAnimal in animalList)
    
       {
    
        Console.WriteLine("{0}{1}",myAnimal .ToString (), myAnimal .Name );
    
       }
    
    
    
       //加入我没有单独定义一个Chicken1,那要如何把鸡姐姐的位置用IndexOf标出来?
    
       //下面的结果是-1,明显不对!
    
       Console.WriteLine("{0} ",animalList .IndexOf ("鸡姐姐"));
    
       Console.ReadKey();
    
      }
    
     }
    
    }
    
    
    
    
    2010年11月26日 15:47

答案

  • 您好:

       IndexOf里的参数应是继承Animal的子类实例,例如上面的cow1,而不是字符串。上面的错误是误把“字符串”认为是Chicken实例。

       注意因为IndexOf用的是内存地址引用的比较。获取索引时不能再创建一个新的实例。例如,应用animalList .IndexOf (cow1),而不是animalList .IndexOf (new Cow("牛哥"))。

       如果想用Name来作比较,最简单的方法是重写Animal的Equals方法。

    2010年11月27日 14:31
    版主

全部回复

  • 您好

    請參考以下程式碼

        static void Main(string[] args)
        {
          ArrayList animalList = new ArrayList();
          Cow cow1 = new Cow("牛哥");
          animalList.Add(cow1);
          animalList.Add(new Chicken("鸡姐姐"));
    
          Chicken chicken1 = (Chicken)animalList[1];
    
          foreach (Animal myAnimal in animalList)
          {
            Console.WriteLine("{0}{1}", myAnimal.ToString(), myAnimal.Name);
          }
    
          Console.WriteLine("{0} ", animalList.IndexOf(chicken1));
          Console.ReadKey();
        }
    

    歡迎參觀我的Blog.NET菜鳥自救會
    2010年11月26日 17:02
  • ArrayList你可以想成它是个动态数组,这个数组当中的大小和范围没有指定.

    Array是数组,它的大小和范围都已经指定好了.可以直接使用

    2010年11月27日 0:44
  • 請參考以下程式碼

     

    static void Main(string[] args)
        {
          ArrayList animalList = new ArrayList();
          Cow cow1 = new Cow("牛哥");
          animalList.Add(cow1);
          animalList.Add(new Chicken("鸡姐姐"));

          Chicken chicken1 = (Chicken)animalList[1];

          foreach (Animal myAnimal in animalList)
          {
            Console.WriteLine("{0}{1}", myAnimal.ToString(), myAnimal.Name);
          }

          Console.WriteLine("{0} ", animalList.IndexOf(chicken1));
          Console.ReadKey();
        }


    2010年11月27日 0:45
  • 如果没有用Chicken chicken1 = (Chicken)animalList[1];
    我该怎么IndexOf来输出鸡姐姐的位置呢???

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    
    namespace 测试动物数列数组
    {
     class Program
     {
      static void Main(string[] args)
      {
       ArrayList animalList = new ArrayList();
       Cow cow1 = new Cow("牛哥");
       animalList.Add(cow1);
       animalList.Add(new Chicken("鸡姐姐") );
       
    
       foreach (Animal myAnimal in animalList)
       {
        Console.WriteLine("{0}{1}",myAnimal .ToString (), myAnimal .Name );
       }
    
       //假如我没有单独定义一个Chicken1,那要如何把鸡姐姐的位置用IndexOf标出来?
       //下面的结果是-1,明显不对!
       Console.WriteLine("{0} ",animalList .IndexOf ("鸡姐姐"));
       Console.ReadKey();
      }
     }
    }
    
    2010年11月27日 8:51
  • 您好:

       IndexOf里的参数应是继承Animal的子类实例,例如上面的cow1,而不是字符串。上面的错误是误把“字符串”认为是Chicken实例。

       注意因为IndexOf用的是内存地址引用的比较。获取索引时不能再创建一个新的实例。例如,应用animalList .IndexOf (cow1),而不是animalList .IndexOf (new Cow("牛哥"))。

       如果想用Name来作比较,最简单的方法是重写Animal的Equals方法。

    2010年11月27日 14:31
    版主