2017-03-28 35 views
0

字典不会抛出异常的不存在的键

CurrentAppSimulator.LicenseInformation.ProductLicenses["nonexistentEntry"] 

MSDN

,并没有抛出异常。

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

+0

这不能是你的整个陈述,它不会超过编译器。 '只能将赋值,调用,增量,减量和新的对象表达式用作语句' –

+0

@RufusL正确。它是'var l = ...;'。我只是在展示可能相关的部分。 – ispiro

+0

请发表整个声明。 –

回答

2

正如一位评论员张贴以上,看来,尽管变量是IReadOnlyDictionary - 这并没有证明这是一个Dictionary。它可能以其他方式实施。

+0

只是为了增加一点点深度。接口只保证*形状*,而不是*行为*。 –

2

正如我在评论中提到的:

LicenseInformation.ProductLicenses不是字典。根据documentataion它是IReadOnlyDictionary。

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

在访问密钥之前检查密钥的存在比较好,因为没有把握确定行为在将来不会改变。

+0

这是最好的场景。在尝试访问密钥之前,请务必检查密钥是否存在,特别是如答案中所述,对未来的更改进行校对。 –