【问题标题】:Dictionary doesn't throw exception for nonexistent key字典不会为不存在的键抛出异常
【发布时间】:2017-08-21 22:51:09
【问题描述】:

我有

CurrentAppSimulator.LicenseInformation.ProductLicenses["nonexistentEntry"]

(MSDN)

而且它不会抛出异常。

这是预期的吗?它会一直这样做吗?

【问题讨论】:

  • 这不可能是你的全部陈述,它不会通过编译器。 Only assignment, call, increment, decrement, and new object expressions can be used as a statement
  • @RufusL 正确。它是var l = ... ;。我只是展示了可能相关的部分。
  • 请发表完整的声明。
  • ProductLicenses 的确切类型是什么
  • LicenseInformation.ProductLicenses 不是字典。它是 IReadOnlyDictionary。而且暗示可能不是字典。

标签: c# .net uwp windows-store-apps win-universal-app


【解决方案1】:

正如评论员在上面发布的那样,似乎虽然变量是IReadOnlyDictionary - 但证明它是Dictionary。它可能会以其他方式实现。

【讨论】:

  • 只是为了增加一点深度。接口只保证shape,不保证behavior
【解决方案2】:

正如我在 cmets 中提到的:

LicenseInformation.ProductLicenses 不是字典。根据文档,它是 IReadOnlyDictionary。

我没有找到关于它的行为或实现的信息,但是如果在运行时检查它你会发现它是 System.__ComObject:System.MarshalByRefObject。这意味着它绝对不是字典。

最好在访问密钥之前检查它是否存在,因为不能确定将来行为不会改变。

【讨论】:

  • 这是最好的方案。在尝试访问之前始终检查密钥是否存在,尤其是在将来对答案中描述的更改进行校对时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多