您的位置:首页 > 编程语言 > C#

C#==>关于List的一些用法的总结

2010-02-09 22:50 756 查看
Racer 参赛选手类

[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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: