5

我是 C#/.Net 的新手,对类 Dictionary 有疑问。我创建了一个组字典并添加了一个项目(或更多项目,现在没关系):

Dictionary<int, ListViewGroup> groups = new Dictionary<int, ListViewGroup>();
groups.Add(1, new ListViewGroup("Group1"));

我想通过它的键找到我的组。在文档中它说有一个 Item 属性,我可以直接或通过索引器访问它。但是,当我尝试直接访问它时:

ListViewGroup g = groups.Item(1);

我的编译器说 Dictionary 类中没有属性 Item 的定义。谁能给我解释一下?谢谢你。

4

3 回答 3

9

Item是一个索引器,您可以通过查看定义来验证它:

public TValue this[TKey key] { get; set; }

只需使用索引器语法按键访问元素:

ListViewGroup g = groups[1]; 
Console.WriteLine (g.Header); //prints Group1 

注意:如果字典KeyNotFoundException中不存在具有此类键的条目,则会抛出此错误。groups例如groups[2],会在您的情况下引发异常。

于 2013-06-04T12:05:42.373 回答
3

使用groups[n].

如果您查看手册Dictionary<TKey, TValue>.Item您可能会发现:

此属性提供了使用以下 C# 语法访问集合中特定元素的能力: myCollection[key]

或者在网上搜索“C# indexers”:

索引器教程(C#)

定义索引器允许您创建类似于“虚拟数组”的类。可以使用[]数组访问运算符访问该类的实例。

索引器,或者Item在这种情况下,永远不会被直接访问。

于 2013-06-04T12:05:34.320 回答
1

您收到错误消息,因为在基本级别的字典类中没有名为 Item 的属性。

Dictionary<int, ListViewGroup> groups = new Dictionary<int, ListViewGroup>();
groups.Add(1, new ListViewGroup("Group1"));

ListViewGroup g = groups.Item(1);

ListViewGroup g = groups[1];

从实际理解的角度来看(我要说的只是为了基本理解)字典本质上是一个数组,而不是被迫使用数字,以便您可以使用任何您喜欢的数字甚至是字符串。

new Dictionary<int, ListViewGroup>

在你的字典里你有

1    Group1

groups[1] 将检索 Group1。

要真正理解 Dictionary 的酷炫之处在于使用字符串键。

new Dictionary<string, ListViewGroup>

所以如果你这样做

groups.Add("mykey1", new ListViewGroup("Group1"));

groups["mykey1"] 将检索 Group1

于 2013-06-04T12:19:37.780 回答