2012-04-04 44 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默认情况下此功能只能工作。这有点不妥。好吧,相当可笑。呃,这很糟糕。避免必须要知道设置。