2009-10-05 8 views
1

Je travaille sur du code VB.net dont j'ai hérité et je vois un comportement très étrange en essayant de rechercher une valeur dans un objet Interop.Scripting.Dictionary.Problème d'évaluation très étrange

Voici la sortie de mes montres. Les expressions sont en italique et les valeurs de retour sont bolded:

oAwayBalanceTeam.Dates ("40068") {entier} Objet

CStr (Int (oTempBooking.StartDateTime.ToOADate))"40068" chaîne

oAwayBalanceTeam.Dates (CSTR (Int (oTempBooking.StartDateTime.ToOADate)))Nothing objet

Notez que la première surveillance renvoie un entier avec une valeur de 1 lorsqu'une clé littérale chaîne de "40068" est transmise. La seconde surveillance renvoie la chaîne "40068". Cependant, lorsque vous passez l'expression de la seconde montre comme valeur de clé dans la troisième montre, rien n'est renvoyé.

Quelqu'un a-t-il une idée de ce qui se passe ici?

Répondre

0

Sur un suggestion d'un collègue, j'ai essayé d'assigner l'expression de la deuxième montre dans une chaîne et de passer ce var au dictionnaire.

Dim sKey As String 

sKey = CStr(Int(oTempBooking.StartDateTime.ToOADate)) 

oAwayBalanceTeam.Dates(sKey) 

Ceci a fonctionné pour certaines raisons alors que l'expression seule ne l'a pas fait. Alors que mon problème est résolu pour l'instant, j'aimerais toujours savoir pourquoi cela est arrivé si quelqu'un a une idée.

0

Pouvez-vous fournir un repro plus complet ici (et en particulier quelle version de Visual Studio vous utilisez). J'ai essayé le code suivant sur Visual Studio 2008 RTM et obtenu le résultat attendu dans tous les cas.

code

Module Module1 

    Sub Main() 
     Dim map = New Scripting.Dictionary 
     map("40068") = 1 
     Stop 
    End Sub 

End Module 

Expressions visionnées

  • carte ("40068") 1 {entier} objet
  • CStr (Int ("40068")) "40068" String
  • map (CStr (Int ("40068"))) 1 {Entier} Objet
+0

Malheureusement, je ne peux pas facilement résumer. Le code est vraiment moche. Il ya des centaines de lignes pour obtenir l'image complète ici et s'étend sur 3 ou 4 fichiers de code. J'ai copié les montres à partir du même point de rupture, même si cela aide du tout. J'utilise: Microsoft Visual Studio 2008 Version 9.0.21022.8 RTM Microsoft .NET Framework version 3.5 SP1 Microsoft Visual Basic 2008 91904-270-9795282-60037 –

+0

Quel est le type de oAwayBalanceTeam.Dates? – JaredPar

+0

Interop.Scripting.Dictionary –