2008-11-18 48 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>]的整数索引是位置。

相关问题