2009-10-05 81 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