【问题标题】:Very strange evaluation problem很奇怪的评价问题
【发布时间】:2009-10-05 21:46:55
【问题描述】:

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

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

oAwayBalanceTeam.Dates("40068") 1 {Integer} 对象

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

oAwayBalanceTeam.Dates(CStr(Int(oTempBooking.StartDateTime.ToOADate))) 对象

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

有人知道这里发生了什么吗?

【问题讨论】:

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


    【解决方案1】:

    您能否在此处提供更完整的重现(尤其是您使用的 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} 对象
    • CStr(Int("40068")) "40068" 字符串
    • map(CStr(Int("40068"))) 1 {Integer} 对象

    【讨论】:

    • 不幸的是我不能轻易总结。代码真的很丑。在这里获得完整的图片需要数百行,并且跨越 3 或 4 个代码文件。我从同一个断点复制了手表,但如果这有帮助的话。我正在使用: Microsoft Visual Studio 2008 版本 9.0.21022.8 RTM Microsoft .NET Framework 版本 3.5 SP1 Microsoft Visual Basic 2008 91904-270-9795282-60037
    • oAwayBalanceTeam.Dates 的类型是什么?
    【解决方案2】:

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

    Dim sKey As String
    
    sKey = CStr(Int(oTempBooking.StartDateTime.ToOADate))
    
    oAwayBalanceTeam.Dates(sKey)
    

    这出于某种原因而起作用,而单独的表达式则不起作用。虽然我的问题目前已解决,但如果有人有想法,我仍然很想知道为什么会发生这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      相关资源
      最近更新 更多