C#depth第二版中C#Dictionary是如何以这种方式使用的?

C#depth第二版中C#Dictionary是如何以这种方式使用的?,c#,dictionary,C#,Dictionary,我在Jon Skeet的C#Depth第二版中遇到了以下代码,我不明白它是如何工作的 Dictionary<string,int> frequencies; frequencies = new Dictionary<string,int>(); string[] words = Regex.Split(text, @"\W+"); foreach (string word in words) { if (frequencies.ContainsKey(word))

我在Jon Skeet的C#Depth第二版中遇到了以下代码,我不明白它是如何工作的

Dictionary<string,int> frequencies;
frequencies = new Dictionary<string,int>();
string[] words = Regex.Split(text, @"\W+");
foreach (string word in words)
{
    if (frequencies.ContainsKey(word))
    {
        frequencies[word]++;
    }
    else
    {
        frequencies[word] = 1;
    }
}
但我在任何地方都找不到这样的引用,即指定一个字典对象,后跟方括号,并且赋值也会填充键。我认为您需要使用dictionary实例的add方法,或者在初始化dictionary时这样做

如果我是对的,这项行动的名称是什么

frequencies[word] = 1;
和打电话一样

frequencies.Add(word, 1);
如果关键字不存在。否则将重写该值

在字典上调用
[something]
时,通过键
something
获得一个值。设置也是如此。设置值时,可以调用
字典[key]=value

使用的函数是

我跳进了对象浏览器,发现这是关于通用字典的
[]
操作符的:

public TValue此[TKey]{get;set;}
System.Collections.Generic.Dictionary的成员

摘要:获取或设置与指定键关联的值

参数:键:要获取或设置的值的键

返回值:与指定键关联的值如果 找不到指定的键,get操作将抛出 System.Collections.Generic.KeyNotFoundException、和一个集合操作 使用指定的键创建新元素。

异常:System.ArgumentNullException:项为空。 System.Collections.Generic.KeyNotFoundException:属性为 已检索,但集合中不存在密钥


这是您可能想查看的参考资料;)如果找不到指定的密钥。。。集合操作使用指定的键创建新元素。我不熟悉索引器结果上的递增运算符。频率[字]+;这里没有装箱,这不是一个ref int,但它仍然会增加字典中的int值,就像数组[index]++一样。它也适用于字典中的字符串,我没有尝试委托(也实现了“+”)。请原谅这不是一个答案,更像是问题上的裂痕,这是相当广泛的,但我没有代表评论它只是“相同”,如果该键没有存在值;否则,一个抛出,另一个不使用此操作不使用
[]运算符,它是一个自定义索引器。看见字典的行为与
Add
方法不同,因为
Add
会在键已经存在时引发异常,而索引器会覆盖任何现有值。@Lee:它确实使用了该运算符-只是该运算符已被
字典
重载。从您链接到的文档中:“方括号([])用于数组、索引器和属性。”不过,我同意使用索引器和使用
Add
之间的区别。文档在这里,oops,@Lee,同上。@Lee这不使用[]运算符,它是一个自定义索引器。From:数组索引运算符不能重载;但是,类型可以定义索引器和采用一个或多个参数的属性。索引器参数用方括号括起来,就像数组索引一样,但索引器参数可以声明为任何类型,而数组索引必须是整数。
frequencies.Add(word, 1);