C#depth第二版中C#Dictionary是如何以这种方式使用的?
我在Jon Skeet的C#Depth第二版中遇到了以下代码,我不明白它是如何工作的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))
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);