![]() |
1
8
您可以检测对象是否具有属性,而不必使用C 4.0的动态功能-而使用已经存在一段时间的反射功能(我至少知道.NET 2.0,不确定<2.0)
如果对象没有该属性,则getProperty()将返回空值。您可以对字段(getField())和方法(getMethod())执行类似的操作。 不仅如此,而且一旦拥有了propertyinfo,就可以直接使用它来进行设置:
如果不确定属性是否具有set方法,则可以采用更安全的路径:
这还为您提供了一个额外的好处,即比动态调用的查找开销更具性能(找不到该语句的引用,所以我只将其浮动在那里)。 我想这不是直接回答你的问题,而是实现同一目标的另一种解决方案。实际上,我还没有使用4.0特性(尽管我非常喜欢Ruby中的动态类型)。当然,它没有动态解决方案那么干净/可读,但是如果您不想抛出异常,那么它可能是一种可行的方法。 edit:as@arbiter指出,“这只对本机.NET动态对象有效。例如,对于IDispatch,这将不起作用。” |
![]() |
2
5
我刚刚花了将近一个小时的时间寻找在动态上获得某种类似于红宝石的“respondto”方法的方法。答案当然不容易,但我还没有放弃。 反省的观点应该是值得尝试的。 对于dynamic,目前为止我只得到一个将对象视为动态的扩展方法。如果它起作用,它就起作用,如果不起作用,它就会默默地失败…
那你就可以…
更新: 既然我被否决了,你让我比扩展方法的微妙命名更简洁些:它是 炸药 (GEDDIT?)!狼吞虎咽的异常和无所作为是 坏的 .这不是生产代码,而是概念验证峰值的版本1。我一直忘了,在StackOverflow这样的数千个论坛上,你不能表现得很微妙。我是罪魁祸首。 |
![]() |
3
3
18个月后…看来你真正想要的是现在它已经发布了。这是 特里格特成员 , TyGET值 等。实际上,可能 TrySetMember 具体来说。 http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject_members.aspx |
![]() |
4
-1
我要插话说静态输入可以避免这个问题。 这是具有重写功能的抽象方法的候选项。 |
![]() |
5
-1
考虑一下:由于目标类可以为非现有成员的成员查找和调用提供自己的实现(通过实现idynamicObject或对dynamicObject进行子类化),因此验证成员是否存在的唯一方法就是 是调用它并查看对象是处理它还是抛出异常 . 再次强调,非现有成员的处理是动态的! --编辑—— 如果控制对象创建,则可以对类进行子类化并实现IDynamicObject,以向其他类发出方法不存在的信号。 如果答案指出了真相,那么轻率地否定答案是不公平的——也就是说。 没有也不能 一 可靠的 动态调度环境下构件存在性的检验方法 除了调用成员 . |
![]() |
6
-1
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 3 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 3 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 3 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |