On pourrait définir une interface pour la touche de fonction de recherche dans un dictionnaire. Je serais probablement le définir comme quelque chose comme:
Interface IKeyLookup(Of Out TValue)
Function Contains(Key As Object)
Function GetValueIfExists(Key As Object) As TValue
Function GetValueIfExists(Key As Object, ByRef Succeeded As Boolean) As TValue
End Interface
Interface IKeyLookup(Of In TKey, Out TValue)
Inherits IKeyLookup(Of Out TValue)
Function Contains(Key As TKey)
Function GetValue(Key As TKey) As TValue
Function GetValueIfExists(Key As TKey) As TValue
Function GetValueIfExists(Key As TKey, ByRef Succeeded As Boolean) As TValue
End Interface
La version avec les non-génériques clés permettrait de code qui a été à l'aide de code à l'aide de la non-structure des types de clés pour permettre la clé arbitraire de la variance, ce qui ne serait pas possible avec un paramètre de type générique. On ne devrait pas être autorisé à utiliser un mutable Dictionary(Of Cat, String)
comme mutable Dictionary(Of Animal, String)
depuis le dernier permettrait SomeDictionaryOfCat.Add(FionaTheFish, "Fiona")
. Mais il n'y a rien de mal avec l'aide d'une mutable Dictionary(Of Cat, String)
comme immuable Dictionary(Of Animal, String)
, depuis SomeDictionaryOfCat.Contains(FionaTheFish)
doit être considérée comme une parfaitement bien formé expression (il doit renvoyer false
, sans avoir à rechercher dans le dictionnaire, pour tout ce qui n'est pas de type Cat
).
Malheureusement, la seule façon on va être en mesure d'utiliser effectivement d'une telle interface est si l'on enroule une Dictionary
objet dans une classe qui implémente l'interface. En fonction de ce que vous faites, cependant, une telle interface et la variance, il permet peut faire ça en vaut la peine.