使用try块作为程序流程的预期部分

时间:2015-05-04 11:54:26

标签: vb.net

我正在将一些数据解析为字典。有些键可能会重复并且应该覆盖现有数据,因此我必须检查字典是否包含密钥,但后来我明白了这一点:

而不是

        If Dict.ContainsKey(key) Then
            Dict(key) = val
        Else
            Dict.Add(key, val)
        End If

我用过这个

        Try
            Dict(key) = val
        Catch ex As Exception
            Dict.Add(key, val)
        End Try

我做了一些基准测试,在一个大小为1k的字典中添加了0到1k范围内的100k随机密钥。在发布版本模式下,使用try / catch块的版本似乎总是快40%。

现在从我对Dictionary对象的理解,它不仅仅是一个哈希表,因为纯哈希表不知道使用了什么键,因为我只需要哈希表功能,传递这个人为约束似乎对我没有害处。

让我感到困扰的是使用try块来实现这一点,是不是应该为程序流中的实际异常保留呢?

1 个答案:

答案 0 :(得分:3)

全部取决于重复键的数量。如果没有,则不执行catch。

但你不需要检查它。如果您使用:

Dict(key) = val

它会添加新密钥或覆盖现有密钥。

https://msdn.microsoft.com/en-us/library/9tee9ht2(v=vs.110).aspx