C#==>关于List的一些用法的总结
2010-02-09 22:50
756 查看
Racer 参赛选手类
RacerComparer 用于实现关于Racer类的排序方法Sort()
FindCountry用于实现关于Racer类的查找方法Find()FindIndex()等等。。。
DisplayRacerRecord用于实现关于Racer类的ForEach方法
Person类型用于类型转换
DisplayPersonName用于实现关于Person类的ForEach方法
上述内容的应用
[Serializable] public class Racer : IComparable<Racer>, IFormattable { public Racer() : this(string.Empty, string.Empty, string.Empty) { } public Racer(string firstname, string lastname, string country) : this(string.Empty, string.Empty, string.Empty, 0) { } public Racer(string firstname, string lastname, string country, int wins) { this.FirstName = firstname; this.LastName = lastname; this.Country = country; this.Wins = wins; } public string FirstName { get; set; } public string LastName { get; set; } public string Country { get; set; } public int Wins { get; set; } public override string ToString() { return String.Format("{0} {1}", FirstName, LastName); } public string ToString(string format, IFormatProvider formatProvider) { switch (format.ToUpper()) { case null: case "N": return ToString(); case "F": return FirstName; case "L": return LastName; case "W": return string.Format("{0}, Wins: {1}", ToString(), Wins); case "C": return string.Format("{0},Country {1} ", ToString(), Country); case "A": return string.Format("{0},{1} Wins: {2}", ToString(), Country, Wins); default: throw new FormatException(string.Format(formatProvider, "Format {} is not supported", format)); } } public string ToString(string format) { return ToString(format, null); } public int CompareTo(Racer other) { int compare = this.LastName.CompareTo(other.LastName); if (compare == 0) { return this.FirstName.CompareTo(other.FirstName); } return compare; } }
RacerComparer 用于实现关于Racer类的排序方法Sort()
public class RacerComparer : IComparer<Racer> { public enum CompareType { Firstname, Lastname, Country, Wins } private CompareType compareType; public RacerComparer(CompareType compareType) { this.compareType = compareType; } public int Compare(Racer x, Racer y) { if (x == null) throw new ArgumentNullException("x"); if (y == null) throw new ArgumentNullException("y"); int result = 0; switch (compareType) { case CompareType.Firstname: return x.FirstName.CompareTo(y.FirstName); case CompareType.Lastname: return x.LastName.CompareTo(y.LastName); case CompareType.Country: if ((result = x.Country.CompareTo(y.Country)) == 0) return x.LastName.CompareTo(y.LastName); else return result; case CompareType.Wins: return x.Wins.CompareTo(y.Wins); default: throw new ArgumentNullException("Invalid Compare Type"); } } }
FindCountry用于实现关于Racer类的查找方法Find()FindIndex()等等。。。
/// <summary> /// 用于实现查找方法的参数 /// Predicate<T> match /// 该类的FindCountryPredicate实现一个参数为T,返回值为bool的方法 /// </summary> public class FindCountry { private string country; public FindCountry(string country) { this.country = country; } public bool FindCountryPredicate(Racer racer) { if (racer == null) { throw new ArgumentException("racer"); } else { return racer.Country == this.country; } } }
DisplayRacerRecord用于实现关于Racer类的ForEach方法
/// <summary> /// 用于实现foreach方法的参数 /// Action<T> action /// 该类的DisplayRecord实现一个参数为T,返回值为void的方法,必须 /// </summary> public class DisplayRacerRecord { public void DisplayRecord(Racer r) { Console.WriteLine(r.ToString("N") + " 成绩:" + r.Wins); } }
Person类型用于类型转换
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return this.FirstName + " " + this.LastName; } }
DisplayPersonName用于实现关于Person类的ForEach方法
/// <summary> /// 用于实现Person类型的foreach方法的参数 /// Action<T> action /// 该类的DisplayName实现一个参数为T,返回值为void的方法,必须 /// </summary> public class DisplayPersonName { public void DisplayName(Person p) { Console.WriteLine(p.ToString() ); } }
上述内容的应用
static void Main(string[] args) { Racer graham = new Racer("Graham", "Hill", "UK", 16); Racer Emerson = new Racer("Emerson", "Fittipaldi", "Brazil", 14); Racer Mario = new Racer("Mario", "Andertti", "USA", 12); List<Racer> racers = new List<Racer>() { graham, Emerson, Mario }; racers.Add(new Racer("Michael", "Third", "Germany", 21)); racers.Add(new Racer("Michael", "Second", "Germany", 11)); racers.Add(new Racer("Michael", "First", "Germany", 91)); racers.Sort(); racers.Sort((r1, r2) => r2.Wins.CompareTo(r1.Wins)); racers.Sort(new RacerComparer(RacerComparer.CompareType.Wins)); //颠倒顺序 racers.Reverse(); //用于查找车手位置,第一个国家为Germany的车手 FindCountry GermanyFinder = new FindCountry("Germany"); int index = racers.FindIndex(GermanyFinder.FindCountryPredicate); Console.WriteLine(index); //结果3 //用于查找车手 Racer racer = racers.Find(GermanyFinder.FindCountryPredicate); //也可以定义一个λ表达式 Racer racer1 = racers.Find(r1 => r1.Country == "UK"); //用FindAll方法返回所有满足条件的对象列表 List<Racer> racerLst = racers.FindAll(r => r.Wins > 12); Console.WriteLine(racer.ToString("A")); Console.WriteLine(racer1.ToString("A")); Console.WriteLine(racerLst.Count); //用于循环显示成绩 DisplayRacerRecord display = new DisplayRacerRecord(); racers.ForEach(display.DisplayRecord); //集合类型的类型转换 List<Person> persons = racers.ConvertAll<Person>(r => new Person() { FirstName = r.FirstName, LastName = r.LastName }); persons.ForEach((new DisplayPersonName()).DisplayName); Console.Read(); }
相关文章推荐
- [c#基础教程]C#泛型列表List<T>基本用法总结
- C# List<T>基本用法
- C# List<T>用法
- C# 泛型List<T>学习总结
- C#泛型列表List<T>基本用法总结
- C# List<T>用法
- C# List<T>用法
- C# List<T>用法
- C# List<T>之distinct用法
- C# List<T>用法详解
- 关于C++const关键字的一些总结<一>
- C# List<T>用法
- C#List<T>的用法详解(转载笔记)
- C# List<T>用法
- C#中List<T>的排序用法(Sort)
- [C#基础教程之]C# List<T>用法
- C# List<>简单用法
- C# List<T>用法
- asp.net中关于&lt;% %&gt;、&lt;%= %&gt;的用法——个人总结
- 关于C#泛型列表List<T>的基本用法总结