首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制动态“不抛出异常”

如何控制动态“不抛出异常”
EN

Stack Overflow用户
提问于 2015-04-21 16:12:24
回答 1查看 292关注 0票数 1

我有一段代码试图从这样的对象中获取BarID:

代码语言:javascript
复制
try
{

     dynamic dynItem = (dynamic)foo;
     string barId = dynItem.BarID;
}
catch (RuntimeBinderException)
{
       // Deliberately swallow any errors due to late-binding
}

请注意,foo是一个COM对象,有许多COM接口公开它,我不能简单地尝试对它们进行转换。

问题是,动态实现正在抛出该RuntimeBinderException,因为“第一次机会异常”导致Visual中断,我需要避免这种情况。

知道我能不能访问一些API (Microsoft.Dynamic?)要想在没有抛出异常的情况下调用BarId,很可能就像dynamic在幕后所做的那样?

注意:

  • 因为COM,反射无法工作
  • 我可以使用COM IDispatch接口,但是这个级别太低了(接下来的两天我必须编写单元测试.)
EN

回答 1

Stack Overflow用户

发布于 2015-04-21 19:26:03

我不相信你能在没有异常的情况下测试这个。我不认为有什么魔法发生在你看不到的被子下面。您可以尝试的一件事是让所有的对象都实现一个IHaveBarID接口。

然后你可以写:

代码语言:javascript
复制
IHaveBarID dynItem = foo as IHaveBarID;
if (dynItem != null)
    string  barID = dynItem.BarID;

否则,您需要使用IDispatch或告诉VS不要中断特定类型的异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29777715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档