- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 this关于C# 4.0 中的动态对象的文章。
在该示例中,函数 TryGetMember(GetMemberBinder binder, out object result) 的第二个参数是 Object 类型。我看了MSDN并注意到其他方法也将参数作为 Object 获取。为什么这些函数不是通用的?
来自 MSDN
In relation to simple assignments, boxing and unboxing are computationally expensive processes
如果装箱/拆箱很昂贵,使用泛型不是更好吗?
谢谢。
最佳答案
注意“与简单赋值相关”。换句话说,与最便宜的可能操作之一相比,装箱是昂贵的。
与涉及动态类型的其他机制相比,装箱是廉价的:)
如果 TryGetMember
是通用的,则意味着调用者 必须知道期望的类型。动态类型的要点之一是调用者不能保证会发生什么。如果我写:
dynamic foo = GetDynamicValueFromSomewhere();
Console.WriteLine(foo.SomeProperty);
这只会解决 Console.WriteLine
的哪个重载要在 SomeProperty
被评估后使用。它没有“预期的”返回类型...那么您希望使用哪种泛型类型参数?
请记住,大多数动态类型方案无论如何都会使用 object
作为 CLR 中的中间表达式类型。如果我写:
dynamic x = 10;
那是已经的拳击。您不能在 CLR 中表示“不确定类型的未装箱值类型”。 (它会分配多少空间?)
关于c# - 为什么 DynamicObject 类中的方法不是通用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5308939/
我希望能够存储一个 Action 字典,并能够根据字典的键调用那些 Action 。如果未找到 key ,则不会调用任何操作。我有一个想法,即使用扩展 DynamicObject 的对象执行调用并在构
我有一个 DynamicObject 的子类,我想像 DO 的显式转换方法 TryConvert 一样实现原始类型的隐式转换;也就是说,无需编写多个隐式运算符 [type] 函数。 用法: dynam
假设我不能使用 ExpandoObject 并且必须自己滚动:- class MyObject : DynamicObject { dictionary _properties = dicti
这是从 DynamicObject 派生的 DynamicDataObject 类 public class DynamicDataObject : DynamicObject {
我有列表,其中 MyType:DynamicObject。 MyType 继承自 DynamicObject 的原因是我需要一个可以包含未知数量属性的类型。 在我需要过滤列表之前,一切正常。有没有办法
我知道 viewbag 是现成的 DynamicObject 之一,但是如果您不在 View 或 Controller 中,是否还有其他现成的 DynamicObject 除了自己写? (顺便说一句,
我正在实现一个通用函数来从任意提供的动态对象中提取一个值,但不知道如何调用 TryGetMember因为它需要 GetMemberBinder这是抽象的,因此我无法创建它。 样本... public
我正在试验 C# 4.0 的动态对象模型。 我创建了一个名为“Block”的抽象类,它继承自 DynamicObject。它覆盖 TryGetMember 和 TrySetMember。 此外,我创建
假设我有一个继承自 DynamicObject 的类: public class DynamicBase : DynamicObject { public override bool TryGe
在我们的应用程序中,Resources.designer.cs 文件中有 1000 次静态属性的使用。例如: Resources.string_to_identify_the_resource 我们也
我正在编写一个 Javascript C# 桥并遇到了以下问题: 有一个 JSObject 类: public class JSObject : DynamicObject { public
我有一个派生自 DynamicObject 类的类。在调用 JsonConvert.SertializeObject 时,没有任何动态属性被序列化。 类定义为, public clas
现在我有一个扩展 DynamicObject 并覆盖 TryGetMember 的类。 public class FieldCollection : DynamicObject, ICollectio
在 DynamicObject 的文档中,有一个 DynamicDictionary 的示例,它允许您像使用具有属性的类一样使用字典。 这是类(为简洁起见略作修改): public class Dyn
我正在阅读 this关于C# 4.0 中的动态对象的文章。 在该示例中,函数 TryGetMember(GetMemberBinder binder, out object result) 的第二个参
我已成功将事件处理程序添加到我的动态对象中。但是,我无法删除它们。 dynamic d = new MyDynamicObject(); d.MyEvent += new EventHandler(t
我正在尝试设计一个执行提取转换加载操作的过程。我想在我的管道中使用 ExpandoObject 以允许我轻松地将列添加到我的数据流中。基本上,我从某种数据源读取数据,将其转换为动态数据,然后将其返回到
通常,当您覆盖/实现 bool TryDoSomething(...) 方法时,如果它不起作用,您将返回 false。 在 DynamicObject 的情况下,我们返回 false 并且它抛出一个仅
是否可以确定动态成员访问期望的类型?我试过了 dynamic foo = new MyDynamicObject(); int x = foo.IntValue; int y = (int)foo.I
我正在尝试构建一个能够处理通用方法调用的 DynamicObject,但似乎需要的 API - 尽管存在于 RC versions of 4.0 Framework 中- 已在 RTM 中标记为内部(
我是一名优秀的程序员,十分优秀!