2009-10-05 88 views
1

我正在研究一些VB.net代码,并且在尝试查找Interop.Scripting.Dictionary对象中的值时看到一些非常奇怪的行为。非常奇怪的评估问题

这是我的手表的输出。表达式用斜体和返回值以粗体显示:

oAwayBalanceTeam.Dates( “40068”) {整数}对象

CStr的(INT(oTempBooking.StartDateTime.ToOADate))“40068”字符串

oAwayBalanceTeam.Dates(CSTR(INT(oTempBooking.StartDateTime.ToOADate)))没什么对象

注意,当传入字符串文字键“40068”时,第一只手表返回值为1的整数。第二只手表返回字符串“40068”。但是,将第二只手表中的表达式作为第三只手表中的键值传递时,不返回任何内容。

任何人有任何想法这里发生了什么?

回答

0

On a来自同事的建议,我尝试将第二个表的表达式分配给一个字符串并将该var传递给Dictionary。

Dim sKey As String 

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

oAwayBalanceTeam.Dates(sKey) 

这有效,但表达本身并没有。虽然我的问题现在已经解决,但我仍然很想知道为什么会有这种情况发生,如果有人有想法。

0

你能否在这里提供更完整的repro(特别是你使用的是什么版本的Visual Studio)。我在Visual Studio 2008 RTM上尝试了以下代码,并在每种情况下都获得了预期的结果。

代码

Module Module1 

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

End Module 

表达式观看

  • 地图( “40068”)1 {整数}对象
  • CStr的(中间体( “40068”)) “40068” 字符串
  • map(CStr(Int(“40068”)))1 {Integer} Object
+0

不幸的是,我不能轻松总结。代码真的很难看。这里有数百行代码可以在这里获得完整的图片,并且可以跨越3或4个代码文件。我从同一个转折点复制了手表,尽管如此,手表完全有帮助。 我使用: 微软的Visual Studio 2008版本9.0.21022.8 RTM 的Microsoft .NET Framework 3.5版SP1 的Microsoft Visual Basic 2008 91904-270-9795282-60037 – 2009-10-05 22:04:01

+0

什么是oAwayBalanceTeam.Dates的类型? – JaredPar 2009-10-05 22:09:11

+0

Interop.Scripting.Dictionary – 2009-10-05 22:25:16