位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 对泛型列表进行排序和搜索

提问人:刘团圆发布时间:2020-12-08

    对泛型列表进行排序与对其他列表进行排序是一样的。这里唯一的区别在于,可使用泛型接口 IComparer和IComparable<T>,它们提供了略有区别的、针对特定类型的方法。下表列出了它们之间的区别。

泛型方法

非泛型方法

IJ

int IComparable<T>

int IComparable

在泛型版本中楚强类型化的

CompareTo(T otherObj)

.CompareTo(object otherObj}


bool IComparable<T>

N/A

在非泛型接口中不存在,可以改用继

.Equals(T otherObj)


承的object.Equals()

型方法

非泛型方法

IJ


int IComparer<T>.Compare

(T objectA, T objectB)

int IComparer

.Compare(object objectA,

object objectB)

在泛型版本中是强类型化的

bool IComparer<T>.Equals

(T objectA, T objectB)

N/A

在非泛型接口中不存在,

承的object.Equals()

可以改用继

int IComparer<T>

.GetHashCode(T objectA)

N/A

在非泛型接口中不存在,可以改用继

承的object. GetHashCode ()

    要对List<T>排序,可以在翻辟的类型上提供IComparable<T>接口,或者提供lComparer<T>接口。另外,还可以提供泛型委托,作为排序方法。从了解代码工作原理的角度看,这非常有趣,因为实现上述接口并不比实现其非泛型版本更麻烦。

    一般情况下,给列表排序需要有一个方法来比较两个T类型的对象。要在列表中搜索,只需要一个方法来检查T类型的对象,看它是否满足某个条件。定义这样的方法很简单,这里给出两个可以使用的泛型委托类型:

• Comparison<T>:这个委托类型用于排序方法,其返回类型和参数如下:

    int method(T objectA, T objects)

• Predicated:这个委托类型用于搜索方法,其返回类型和参数如下:

    bool method{T targetObject)

可以定义任意多个这样的方法,使用它们实现List<I>的搜索和排序方法。


继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部