在没有try / catch的情况下,有效地检查COM属性是否可用

时间:2015-07-21 17:04:53

标签: c# exception exception-handling com vsto

我正在使用VSTO并想检查某个COM对象中是否有某个属性。当它可用时,它将返回一个结果,当它不可用时,它将返回一个异常。

捕获一个com异常非常慢,我想知道是否有一种更有效的方法来检查该属性是否会抛出异常。

请注意,此问题类似,但没有解决方案:How to check if a COM property or method exists without generating an exception?

请注意,还有另一种方法可以通过使用Range.SpecialCells来检查范围是否有验证,但我正在寻找检测COM对象中的属性是否可用的更一般的解决方案,因为这样其他Excel COM对象也会出现相同的性能问题。

举个例子。如果范围具有数据验证,则Range.Validation.Type属性将返回结果,如果它没有数据验证,则它将引发异常。下面的代码在有或没有的单元格上测试10次数据验证。在我的计算机上对具有数据验证的单元进行测试时输出的时间为0毫秒,而未进行数据验证的单元则需要超过500毫秒。

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "
 14
 14
 21
 42
 12"

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

r = Regexp.new('\?|\.|!')
  #=> /\?|\.|!/