VB.NET:使用通用值类型将Hashtable转换为Dictionary

时间:2013-07-19 06:52:58

标签: vb.net generics dictionary hashtable

如何进行从HashtableDictionary的转换,使值保持通用?我的想法是拥有如下功能:

Public Function Hashtable2Dictionary(Of T)(ht As Hashtable) As Dictionary(Of String, T)
    ' do conversion here
End Function

1 个答案:

答案 0 :(得分:1)

也许:

Public Function Hashtable2Dictionary(Of T)(ht As Hashtable) As Dictionary(Of String, T)
    If ht Is Nothing Then Return Nothing
    Dim dict = New Dictionary(Of String, T)(ht.Count)
    For Each kv As DictionaryEntry In ht
        dict.Add(kv.Key.ToString(), CType(ht(kv.Value), T))
    Next
    Return dict
End Function

您无法直接将Hashtable投射到Dictionary。您可以尝试将HashTable中的每个对象投放到TCType使用一些技巧来获得所需的类型,例如StringInt32)。如果无法将其转换为目标类型,则会引发InvalidCastException

你为什么需要它?也许有更好的方法来实现你想要的。通常,您应该避免使用非常规集合,例如ArrayListHashTable