2008-11-18 52 views
3

是否可以創建可以通過索引或密鑰訪問的列表?可以通過索引和密鑰訪問的內置列表

我要尋找一個已經存在,但有這種條件,集合類型,我想避免重新定義索引

+0

定義指標和重點。發佈你想寫的語法。 – 2008-11-18 09:56:03

回答

2

System.Collections.Specialized.NameValueCollection可以做到這一點,但它只能將字符串存儲爲值。

System.Collections.Specialized.NameValueCollection k = 
     new System.Collections.Specialized.NameValueCollection(); 

    k.Add("B", "Brown"); 
    k.Add("G", "Green"); 

    Console.WriteLine(k[0]); // Writes Brown 
    Console.WriteLine(k["G"]); // Writes Green 
0

您可以通過添加以下屬性到您的收藏添加一個索引:

public object this[int index] 
{ 
    get { /* return the specified index here */ } 
    set { /* set the specified index to value here */ } 
} 

通過輸入索引器並按[選項卡] [選項卡],可以在Visual Studio中快速添加此項。

返回類型和索引器類型是可以改變的。您還可以添加多個索引器類型。

1
public object this[int index] 
{ 
    get { ... } 
    set { ... } 
} 

除了做只是一個整數索引,可以提供任何其他類型的密鑰你喜歡

public object this[String key] 
{ 
    get { ... } 
    set { ... } 
} 

如果你不想定義自己的收藏,從List<T>只是繼承,或者只是使用List<T>類型的變量。

4

現有的答案已經展示瞭如何添加自己的索引。

您可能想要查看一些現有的基於密鑰的集合,如SortedList<,>,其行爲與Dictionary<,>類似,但允許使用鍵和位置索引器。

此外 - 你應該能夠繼承大部分這種類型的東西 - 例如,從Collection<>List<>繼承。請注意,如果您的集合實現IList/IList<T>,我不建議如下(我看到偶爾):

public SomeType this[int someId] {...} 

的一點是,人們所期待的IList[<T>]的整數索引是位置。

相關問題