2011-02-08 44 views
0

出於好奇(我只是想知道它是如何在C#中完成的),您如何爲函數/方法提供策略?舉例來說,如果我有這種種在C++的功能,我可以做這樣的事情:函數/方法中的策略

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

其中v是一個向量,v.begin開始它和這個向量的v.end結束,這種奇怪的Comparator()是一個策略,它指定了哪些critceria是要排序的向量。它可以是例如,排序將完成忽略char等的情況下等。
你將如何在C#中做同樣的事情?

回答

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方法。

+0

@Jon所以請你舉個例子。我只想看看它的語法以及它在美學上的外觀。 – 2011-02-08 19:54:30