【发布时间】:2010-11-23 11:53:38
【问题描述】:
显然,无论 GetADynamicThing() 返回的对象类型如何,以下内容在 c# 4.0 中都是有效的
dynamic d = GetADynamicThing();
d.Foo();
如果 d 的运行时类型不包含方法 Foo(),则抛出 RunTimeBinderException。
是否有一种简单方法来确定 Foo() 是否存在于 d 上?
否则,我们会被困在对对象进行旧式反思,或者依赖于 try-catch。不确定我喜欢这两种方法。
更新:所以我们目前有 3 个选项:
- 反射
- 捕获异常
- 希望 GetADynamicThing() 返回您期望它返回的内容
数字 3 似乎是 COM situations is great 中动态的目标用法。我最初问这个问题的原因是为了回应something like this,即使用一些任意创建的对象的方法。这似乎是使用动态的错误情况。
【问题讨论】:
-
编译器不会捕捉到这个。编译器仍然知道 d 是什么类型。
-
@chollida:不,它没有。在编译时,它知道类型是动态的。它不知道这对于实际类型意味着什么,这有点意思。
-
@Chollida,看看他链接的网站