【问题标题】:C#: What does the [string] indexer of Dictionary return?C#:Dictionary 的 [string] 索引器返回什么?
【发布时间】:2008-12-29 14:03:59
【问题描述】:

当字典中不存在该键时,Dictionary[string] 索引器会返回什么?我是 C# 新手,似乎找不到像 Javadocs 一样好的参考。

我得到null,还是得到一个例外?

【问题讨论】:

  • 当你尝试时会发生什么?
  • 我想这会是件好事。
  • 什么是字符串运算符?字典可以有任何类型作为 Key。
  • 我的意思是 [] 运算符,以字符串作为参数
  • 啊,这就是我们在 .NET 中称为索引器的内容。

标签: c# dictionary


【解决方案1】:

我觉得你可以试试

dict.ContainsKey(someKey)

检查字典是否包含键。

谢谢

【讨论】:

    【解决方案2】:

    除了使用TryGetValue,您还可以先使用dict.ContainsKey(key) 检查密钥是否存在,这样就无需在确定是否真的需要之前声明一个值。

    【讨论】:

      【解决方案3】:

      如果您指的是 Dictionary<string,SomeType> 的索引器,那么您应该会看到一个异常 (KeyNotFoundException)。如果你不希望它出错:

      SomeType value;
      if(dict.TryGetValue(key, out value)) {
         // key existed; value is set
      } else {
         // key not found; value is default(SomeType)
      }
      

      【讨论】:

      • 感谢您提供如何使用 out thingy 的示例...哈哈。
      • TryGetValue 和 TryParse 示例可能是您在大多数日常代码中看到的最常见的“out”用例。
      • 当我读到它们时,我真的看不出有什么用处。这似乎是一个两个返回值的黑客攻击。
      【解决方案4】:

      与以往一样,documentation 是找出答案的方式。

      在例外情况下:

      KeyNotFoundException 检索到属性,但集合中不存在键

      (顺便说一句,我假设你的意思是 Dictionary<TKey,TValue>。)

      请注意,这与 non-generic Hashtable behaviour 不同。

      要在您不知道某个键是否存在时尝试获取它的值,请使用TryGetValue

      【讨论】:

      • 谢谢,.net 文档对我来说仍然有点难以阅读并找到我需要的信息。
      • 它大部分都非常好(尤其是离线版本,IMO - 使用索引)但您需要知道要找到通常查找 Item 属性的索引器文档。
      • 索引...好的,我会记住的。我更喜欢 Java 中的 dict.get(key) 。哦,好吧……我是个粉丝。
      • 项目,而不是索引。至于更喜欢 Java 方式 - 给它时间。 C# 是一种比 Java IMO 更好的语言。调整需要一段时间,尤其是 C# 3.0 的各种新特性,但它很可爱:)
      • 您可以使用 Google (google.com/…) 或 MSDN (social.msdn.microsoft.com/Search/en-US/…) 搜索 MSDN 文档。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2016-03-26
      相关资源
      最近更新 更多