功能/方法中的政策

时间:2011-02-08 19:48:36

标签: c#

出于好奇(我只是想知道它是如何在C#中完成的)你如何为一个函数/方法提供策略?例如,如果我有一个在C ++中排序的函数,我可以这样做:

std::sort(v.begin(),v.end(), Comparator<char>());

其中v是向量,v.begin是它的开头,v.end结束了这个向量,这个好奇的Comparator()是一个策略,它指定要对这个向量进行排序的是什么。例如,可以忽略char等的情况进行排序 你会如何在C#中做同样的事情?

1 个答案:

答案 0 :(得分:3)

对于排序,您通常会传递Comparison<T>IComparer<T>。这可以用来比较任何两个元素。 (IComparer<T>实际上是Comparison<T>委托的接口形式。)

所以对于排序示例:

// Using IComparer<T>
listOfStrings.Sort(StringComparer.OrdinalIgnoreCase);

// Handy default comparer...
listOfInts.Sort(Comparer<int>.Default);

// Using Comparison<T> in a slightly odd way (sorting dates by day of month)
listOfDates.Sort((x, y) => x.Day.CompareTo(y.Day));

一般情况下,使用委托时,从.NET 3.5和C#3(使创建委托变得轻而易举)可以使事情变得非常简单,只需要一个操作来确定“策略”。但是,对于相等的事情,您可能需要使用多个操作,因此界面变得有用 - 例如,IEqualityComparer<T>同时包含EqualsGetHashCode方法。