如何在C#深度第二版中以这种方式使用C#Dictionary?

Ben*_*enM 5 c# dictionary

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

具体如何将"单词"键添加到字典中?在我看来,创建了一个名为frequency的新词典,它是空的.然后有一种方法使用Regex.Split将名为text的字符串拆分为字符串数组.到目前为止一切都很好 接下来有一个循环遍历数组的foreach循环,但下一部分将我绊倒,它检查频率是否包含特定单词,如果确实如此,则将其值增加1或者如果它还没有将值设置为1.但是如何首先使用"word"键填充字典以允许对其进行检查?

它似乎发生在这一行

frequencies[word] = 1;
Run Code Online (Sandbox Code Playgroud)

但我无法在任何地方找到一个引用,指的是指定字典对象后跟方括号,并且对值的赋值也会填充键.我认为你需要使用字典实例的add方法,或者在初始化字典时这样做.

如果我是对的,这个动作的名称是什么?

Syn*_*der 8

frequencies[word] = 1;
Run Code Online (Sandbox Code Playgroud)

和打电话一样

frequencies.Add(word, 1);
Run Code Online (Sandbox Code Playgroud)

如果关键字尚不存在.否则,您将覆盖该值.

当你拨打[something]字典时,你会按键获得一个值something.设置也是如此.设置值时,您可以调用dictionary[key] = value.

使用的函数是[]运算符(括号运算符).

我进入对象浏览器,发现了有关[]通用字典的运算符:

public TValue this[TKey key] { get; set; } 成员 System.Collections.Generic.Dictionary<TKey, TValue>

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

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

返回值:与指定键关联的值.如果未找到指定的键,则 get操作将抛出System.Collections.Generic.KeyNotFoundException,并且set操作将使用指定的键创建新元素.

异常:System.ArgumentNullException:key为null.System.Collections.Generic.KeyNotFoundException:检索该属性,并且该集合中不存在密钥.

  • 如果该密钥没有现有值,它只是"相同"; 否则,一个投掷而另一个没有 (3认同)
  • @Lee:它*使用该运算符 - 只是该运算符已被重载为`Dictionary <,>`.从您链接到的文档:"方括号([])用于数组,索引器和属性." 我同意使用索引器和使用"添加"之间的区别. (2认同)