2012-04-04 42 views
0

爲了調試目的,是否可以在運行時獲取Option Compare的值?如何在運行時獲得'Option Compare'的值?

(我的工作,它使用InStr與第一參數作爲String(INSTR的三個參數的版本)的遺留Windows Forms應用程序,而不,然後由Option Compare確定所述第三參數。Option Compare Text理應使得InStr函數不區分大小寫的;缺省值爲Option Compare Binary。)

+2

執行一組比較,其結果區分哪個比較選項被設置?我仍然不確定我爲什麼必須在運行時確定這一點(也不知道如何使用這些信息) – 2012-04-04 09:02:02

+0

我想積極地知道它的價值,而不依賴於檢查代碼或項目設置或編寫額外的代碼這可能是不可能的(例如,在調試.NET程序集(主應用程序正在使用的DLL文件)時,只有PDB文件可用於調試)。 – 2012-04-04 09:08:16

+1

使用String.IndexOf而不是InStr,它不依賴於Option Compare – 2012-04-04 12:13:39

回答

5

選項設置僅在編譯時已知。編譯器用OptionCompareAttribute屬性處理這個問題。當出現在可選參數上時,它會替代選項設置。這啓發了這個功能:

Function GetOptionCompare(<CompilerServices.OptionCompare()> _ 
          Optional ByVal Compare As CompareMethod = CompareMethod.Binary) As CompareMethod 
    Return Compare 
End Function 

但是,這不適用於無法想象的原因。平底船的問題,簡單地採取比較的方法之間的差異優勢:

Function GetOptionCompare() As CompareMethod 
    Return IIf("A" = "a", CompareMethod.Text, CompareMethod.Binary) 
End Function 

,一定要提防選項比較可以爲每個源文件設置後,當你依靠的Visual Studio默認情況下此功能只能工作。這有點不妥。好吧,相當可笑。呃,這很糟糕。避免必須要知道設置。