2010-03-08 45 views
4

我正在學習C#。做下面的練習來利用功能。強迫我的容器類只接受實現IComparable的對象的最佳方法是什麼?

我有這個類充當我的容器:

class myContainer<T> : List<T> 

當我這個結構添加到容器中正常工作,因爲它有IComparable的

interface bla<T> : IComparable<T> {} 
struct IString : bla<IString> 

的實現,當我加個班通過一個接口或直接沒有實現IComparable,我得到一個錯誤在運行時,如果我做類似排序()

什麼是強制我的最佳方式容器類只接受實現IComparable的對象?

感謝

回答

14
class myContainer<T> : List<T> 
    where T : IComparable<T> 
{ 
    ... 
} 

如果可能的話,你可能要考慮也爲你的類支持IComparable(非通用版本)。

This MSDN article on generic constraints有關於where表達式的更多信息。

+0

非常感謝所有 – 2010-03-08 16:10:02

+0

David。 +1,如果您包含指向一般禁忌的鏈接,例如http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4 – 2010-03-08 16:20:39

+0

@Binary Worrier:很樂意。 :-) – 2010-03-08 16:35:29

1

類myContainer中:列表,其中T:IComparaable

需要噸至實現IComparable。查找此WHERE關鍵字;)

3

您可以通過限制where子句是這樣的:

class myContainer<T> : List<T> where T : IComparable<T> 
1

您需要的地方添加到您的類來約束類型。

所以,你需要的東西是這樣的:

class myContainer<T> : List<T> 
    where T: IComparable<T> 
1

使用where關鍵字把一個約束的泛型類型參數:

class myContainer<T> : List<T> where T : IComparable<T> { 
} 
1

實施您的容器自定義對象在施行約束:

public class ContainerList:IList 其中T:IComparable { }

相關問題