非常奇怪的评价问题

时间:2009-10-05 21:46:56

标签: .net vb.net visual-studio debugging

我正在处理一些我继承的VB.net代码,并且在尝试查找Interop.Scripting.Dictionary对象中的值时看到了一些非常奇怪的行为。

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

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

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

oAwayBalanceTeam.Dates(CStr(Int(oTempBooking.StartDateTime.ToOADate))) Nothing Object

注意,当传入字符串文字键“40068”时,第一个监视返回值为1的整数。第二个监视返回字符串“40068”。但是,当从第二个手表传递表达式作为第3个手表中的键值时,返回Nothing。

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

2 个答案:

答案 0 :(得分: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

观看表达式

  • map(“40068”)1 {Integer} Object
  • CStr(Int(“40068”))“40068”String
  • map(CStr(Int(“40068”)))1 {Integer} Object

答案 1 :(得分:0)

根据同事的建议,我尝试将第二只手表中的表达式分配给一个字符串并将该var传递给Dictionary。

Dim sKey As String

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

oAwayBalanceTeam.Dates(sKey)

由于某种原因,这种方式起作用,而单独表达却没有。虽然我的问题现在已经解决了,但我仍然想知道如果有人有想法会发生这种情况的原因。