Csharp/C Sharp/Generics/Generic Collections

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Add Collection Items with IComparable interface implementation

<source lang="csharp"> using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization;

public class Customer : System.IComparable {

   private int _id;
   private string _name;
   private string _rating;
   private static SortOrder _order;
   public enum SortOrder {
       Ascending = 0,
       Descending = 1
   }
   public Customer(int id, string name)
       : this(id, name, "Other") {
   }
   public Customer(int id, string name, string rating) {
       this._id = id;
       this._name = name;
       this._rating = rating;
   }
   public int Id {
       get { return this._id; }
       set { this._id = value; }
   }
   public string Name {
       get { return this._name; }
       set { this._name = value; }
   }
   public string Rating {
       get { return this._rating; }
       set { this._rating = value; }
   }
   public static SortOrder Order {
       get { return _order; }
       set { _order = value; }
   }
   public override bool Equals(Object obj) {
       bool retVal = false;
       if (obj != null) {
           Customer custObj = (Customer)obj;
           if ((custObj.Id == this.Id) &&
               (custObj.Name.Equals(this.Name) &&
               (custObj.Rating.Equals(this.Rating))))
               retVal = true;
       }
       return retVal;
   }
   public override string ToString() {
       return this._id + ": " + this._name;
   }
   public int CompareTo(Object obj) {
       switch (_order) {
           case SortOrder.Ascending:
               return this.Name.rupareTo(((Customer)obj).Name);
           case SortOrder.Descending:
               return (((Customer)obj).Name).rupareTo(this.Name);
           default:
               return this.Name.rupareTo(((Customer)obj).Name);
       }
   }

} public class CollectionTest {

   public static void Main() {
       Collection<Customer> custColl = new Collection<Customer>();
       custColl.Add(new Customer(1, "S"));
       custColl.Add(new Customer(2, "K"));
       custColl.Add(new Customer(3, "T"));
       custColl.Insert(1, new Customer(4, "Inserted Employee"));
       custColl[3] = new Customer(9, "F");
       foreach (Customer cust in custColl)
           Console.Out.WriteLine(cust);
   }

}

</source>


Add object in a hierarchy into a generic Collection

<source lang="csharp">

using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; public class Chicken : Animal {

   public void LayEgg() {
       Console.WriteLine("{0} Animal.", name);
   }
   public Chicken(string newName)
       : base(newName) {
   }

} public class Cow : Animal {

   public void Milk() {
       Console.WriteLine("{0} cow.", name);
   }
   public Cow(string newName)
       : base(newName) {
   }

} public abstract class Animal {

   protected string name;
   public string Name {
       get {
           return name;
       }
       set {
           name = value;
       }
   }
   public Animal() {
       name = "animal";
   }
   public Animal(string newName) {
       name = newName;
   }
   public void Feed() {
       Console.WriteLine("{0} is feeding.", name);
   }

} class Program {

   static void Main(string[] args) {
       Collection<Animal> animalCollection = new Collection<Animal>();
       animalCollection.Add(new Cow("A"));
       animalCollection.Add(new Chicken("B"));
       foreach (Animal myAnimal in animalCollection) {
           myAnimal.Feed();
       }
   }

}

</source>


Add user-defined object to generic Collection

<source lang="csharp"> using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; class Team {

   private string name;
   public Team(string name) {
       this.name = name;
   }
   public override string ToString() {
       return name;
   }

} class Program {

   static void Main(string[] args) {
       Collection<Team> teams = new Collection<Team>();
       teams.Add(new Team("Ferrari"));
       teams.Add(new Team("Williams-BMW"));
       teams.Add(new Team("Bar-Honda"));
       teams.Add(new Team("McLaren-Mercedes"));
       foreach (Team t in teams) {
           Console.WriteLine(t);
       }
   }

}

</source>


Generic Collection and List

<source lang="csharp"> using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization; public class CollectionTest {

   public static void Main() {
       Collection<int> intCollection = new Collection<int>();
       List<String> strList = new List<String>();
       strList.Add("Val1");
       strList.Add("Val2");
       Collection<String> strCollection = new Collection<String>(strList);
       foreach (String strVal1 in strCollection)
           System.Console.WriteLine(strVal1);
       strList[0] = "Val Changed";
       foreach (String strVal2 in strCollection)
           System.Console.WriteLine(strVal2);
   }

}

</source>


Generic collection class

<source lang="csharp"> using System; using System.Collections.Generic; public class Bag<T> {

   private List<T> items = new List<T>();
   public void Add(T item) {
       items.Add(item);
   }
   public T Remove() {
       T item = default(T);
       if (items.Count != 0) {
           Random r = new Random();
           int num = r.Next(0, items.Count);
           item = items[num];
           items.RemoveAt(num);
       }
       return item;
   }
   public T[] RemoveAll() {
       T[] i = items.ToArray();
       items.Clear();
       return i;
   }

} public class MainClass {

   public static void Main(string[] args) {
       Bag<string> bag = new Bag<string>();
       bag.Add("D");
       bag.Add("B");
       bag.Add("G");
       bag.Add("M");
       bag.Add("N");
       bag.Add("I");
       Console.WriteLine("Item 1 = {0}", bag.Remove());
       Console.WriteLine("Item 2 = {0}", bag.Remove());
       Console.WriteLine("Item 3 = {0}", bag.Remove());
       Console.WriteLine("Item 4 = {0}", bag.Remove());
       string[] s = bag.RemoveAll();
   }

}

</source>


Sort by Name

<source lang="csharp"> using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization;

public class Employee : System.IComparable {

   private int _id;
   private string _name;
   private string _rating;
   private static SortOrder _order;
   public enum SortOrder {
       Ascending = 0,
       Descending = 1
   }
   public Employee(int id, string name)
       : this(id, name, "Other") {
   }
   public Employee(int id, string name, string rating) {
       this._id = id;
       this._name = name;
       this._rating = rating;
   }
   public int Id {
       get { return this._id; }
       set { this._id = value; }
   }
   public string Name {
       get { return this._name; }
       set { this._name = value; }
   }
   public string Rating {
       get { return this._rating; }
       set { this._rating = value; }
   }
   public static SortOrder Order {
       get { return _order; }
       set { _order = value; }
   }
   public override bool Equals(Object obj) {
       bool retVal = false;
       if (obj != null) {
           Employee custObj = (Employee)obj;
           if ((custObj.Id == this.Id) &&
               (custObj.Name.Equals(this.Name) &&
               (custObj.Rating.Equals(this.Rating))))
               retVal = true;
       }
       return retVal;
   }
   public override string ToString() {
       return this._id + ": " + this._name;
   }
   public int CompareTo(Object obj) {
       switch (_order) {
           case SortOrder.Ascending:
               return this.Name.rupareTo(((Employee)obj).Name);
           case SortOrder.Descending:
               return (((Employee)obj).Name).rupareTo(this.Name);
           default:
               return this.Name.rupareTo(((Employee)obj).Name);
       }
   }

} public class CollectionTest {

   public static void Main() {
       List<Employee> collCustList = new List<Employee>();
       collCustList.Add(new Employee(99, "H", "P"));
       collCustList.Add(new Employee(77, "B", "G"));
       collCustList.Add(new Employee(55, "B", "G"));
       collCustList.Add(new Employee(88, "B", "P"));
       collCustList.Add(new Employee(11, "L", "O"));
       foreach (Employee cust in collCustList)
           Console.Out.WriteLine(cust);
       Employee.Order = Employee.SortOrder.Ascending;
       collCustList.Sort(delegate(Employee cust1, Employee cust2) {
           return Comparer<Employee>.Default.rupare(cust1, cust2);
       });
       foreach (Employee cust in collCustList)
           Console.Out.WriteLine(cust);
       Employee.Order = Employee.SortOrder.Descending;
       collCustList.Sort(delegate(Employee cust1, Employee cust2) {
           return Comparer<Employee>.Default.rupare(cust1, cust2);
       });
       foreach (Employee cust in collCustList)
           Console.Out.WriteLine(cust);
   }

}

</source>