正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介

2005-06-23 10:16 出处: 作者:Juval Lowy 责任编辑:moningfeng

代码块 12. 使用 System.Array 的一般方法

int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
Action trace = delegate(int number)
{
Trace.WriteLine(number);
};
Predicate isPrime = delegate(int number)
{
switch(number)
{
case 1:case 2:case 3:case 5:case 7:
case 11:case 13:case 17:case 19:
return true;
default:
return false;
}
};
Array.ForEach(numbers,trace);
int[] primes = Array.FindAll(numbers,isPrime);
Array.ForEach(primes,trace);



在 System.Collections.Generic 命名空间中定义的类 List 中,也可以得到类似的一般方法。这些方法使用四个相同的一般委托。实际上,您还可以在您的代码中利用这些委托,如以下部分所示。

静态集合类

尽管 System.Array 和 List 都提供了能够大大简化自身使用方式的、方便的实用工具方法,但 .NET 没有为其他集合提供这样的支持。为了对此进行补偿,本文随附的源代码包含了静态 Helper 类 Collection,其定义如下所示:

public static class Collection
{
public static IList AsReadOnly(IEnumerable collection);
public static U[] ConvertAll(IEnumerable collection,
Converter converter);
public static bool Contains(IEnumerable collection,T item)
where T : IComparable;
public static bool Exists(IEnumerable collection,Predicate);
public static T Find(IEnumerable collection,Predicate match);
public static T[] FindAll(IEnumerable collection,
Predicate match);
public static int FindIndex(IEnumerable collection,T value)
where T : IComparable;
public static T FindLast(IEnumerable collection,
Predicate match);
public static int FindLastIndex(IEnumerable collection,T value)
where T : IComparable;
public static void ForEach(IEnumerable collection,Action action);
public static T[] Reverse(IEnumerable collection);
public static T[] Sort(IEnumerable collection);
public static T[] ToArray(IEnumerable collection);
public static bool TrueForAll(IEnumerable collection,
Predicate match);
//Overloaded versions for IEnumerator
}

Collection 的实现简单易懂。例如,以下为 ForEach() 方法:

public static void ForEach(IEnumerator iterator,Action action)
{
/* Some parameter checking here, then: */
while(iterator.MoveNext())
{
action(iterator.Current);
}
}



Collection 静态类的用法非常类似于 Array 和 List,它们都利用相同的一般委托。您可以将 Collection 用于任何集合,只要该集合支持 IEnumerable 或 IEnumerator:

Queue queue = new Queue();
//Some code to initialize queue
Action trace = delegate(int number)
{
Trace.WriteLine(number);
};
Collection.ForEach(queue,trace);


键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品