首页 > 代码库 > C#学习笔记(八)——集合、比较和转换

C#学习笔记(八)——集合、比较和转换

一、集合

** System.Collections名称空间中的几个接口提供了基本的集合功能

image

Ps:这里看成一个动态的链表,但是已经完美的封装好了。

一、使用集合

1、代码示例

(1)Animal.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Exercise{    public abstract class Animal    {        protected string name;        public string Name        {            get            {                return name;            }            set            {                name = value;            }        }        public Animal()        {            name = "The animal with no name";        }        public Animal(string newName)        {            name = newName;        }        public void Feed()        {            Console.WriteLine("{0} has been fed", name);        }    }}

(2)Cow.cs

namespace Exercise{    public class Cow:Animal     {        public void Milk()        {            Console.WriteLine("{0} has been milked.", name);        }        public Cow(string newName):base(newName)        {        }    }}

(3)Chicken.cs

namespace Exercise{    public class Chicken:Animal    {        public void LayEgg()        {            Console.WriteLine("{0} has laid an egg.", name);        }        public Chicken(string newName):base(newName)        {        }    }}
(4)Program.cs

namespace Exercise{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Create an Array type collection of Animal " + "objects and use it:");            Animal[] animalAraay = new Animal[2];            Cow myCowl = new Cow("Deirdre");            animalAraay[0] = myCowl;            animalAraay[1] = new Chicken("Ken");            foreach(Animal myAnimal in animalAraay)            {                Console.WriteLine("New {0} object added to Array collection, " + "Name = {1}", myAnimal.ToString(), myAnimal.Name);            }            Console.WriteLine("Array collection contains {0} objects.", animalAraay.Length);            animalAraay[0].Feed();            ((Chicken)animalAraay[1]).LayEgg();            Console.WriteLine();            Console.ReadKey();            Console.WriteLine("Create an ArrayList type collection of Animal " + "object and use it ");            ArrayList animalArrayList = new ArrayList();            Cow mycow2 = new Cow("Heylay");            animalArrayList.Add(mycow2);            animalArrayList.Add(new Chicken("Roy"));            foreach(Animal myAnimal in animalArrayList)            {                Console.WriteLine("New {0} object added to ArrayList collection," + "Name = {1}", myAnimal.ToString(), myAnimal.Name);            }            Console.WriteLine("ArrayList collection contains {0} objects.", animalArrayList.Count);            ((Animal)animalArrayList[0]).Feed();            ((Chicken)animalArrayList[1]).LayEgg();            Console.WriteLine();            Console.WriteLine("Additional manipulation of ArrayList:");            animalArrayList.RemoveAt(0);            ((Animal)animalArrayList[0]).Feed();            animalArrayList.AddRange(animalAraay);            ((Chicken)animalArrayList[2]).LayEgg();            Console.WriteLine("The animal called {0} is at index {1}.", myCowl.Name, animalArrayList.IndexOf(myCowl));            myCowl.Name = "Janice";            Console.WriteLine("The animal is now called {0}.", ((Animal)animalArrayList[1]).Name);            Console.ReadKey();        }    }}

2、运行结果

image

3、注意点:

(1)ArrayList创建时不需要指定初始长度值。但是Array是需要的。

(2)对于ArrayList是不强调类型的一个集合,所以再采用所属对象的方法之类的时候,必须进行强制类型转换,而对于Array来说,他是强调对象类型的集合,所以可以直接调用其方法,但是对于其派生类来说,还是需要进行强制类型转换。

(3)还有些删除(at)和扩展方法(AddRange)之类的扩展方法

(4)ArrayList需要加上using System.Collections;名字空间的引用,切记切记。

C#学习笔记(八)——集合、比较和转换