我有一段代码试图从这样的对象中获取BarID:
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在幕后所做的那样?
注意:
发布于 2015-04-21 19:26:03
我不相信你能在没有异常的情况下测试这个。我不认为有什么魔法发生在你看不到的被子下面。您可以尝试的一件事是让所有的对象都实现一个IHaveBarID接口。
然后你可以写:
IHaveBarID dynItem = foo as IHaveBarID;
if (dynItem != null)
string barID = dynItem.BarID;否则,您需要使用IDispatch或告诉VS不要中断特定类型的异常。
https://stackoverflow.com/questions/29777715
复制相似问题