Tag: 动态

在C#4.0中在运行时附加属性和方法?

使用动态function在运行时附加方法和属性有什么性能影响,如本博文中所述? ExpandoObject的实际用途是什么?

我可以绑定WinRT / Windows 8商店应用程序中的DynamicObject

我有以下代码: public class MyClass: DynamicObject, INotifyPropertyChanged { Dictionary properties = new Dictionary(); public override bool TryGetMember(GetMemberBinder binder, out object result) { if (properties.ContainsKey(binder.Name)) { result = properties[binder.Name]; return true; } else { result = “Invalid Property!”; return false; } } public override bool TrySetMember(SetMemberBinder binder, object value) { properties[binder.Name] = value; this.OnPropertyChanged(binder.Name); return true; } […]

DynamicObject隐式转换

我有一个DynamicObject的子类,我想为原始类型实现隐式转换,就像DO的显式转换方法TryConvert一样; 也就是说,无需编写多个隐式运算符[type]函数。 用法: dynamic myDynamicObject = new MyDynamicObject(“1”); int sum = 1 + myDynamicObject; // instead of int i = 1 + (int)myDynamicObject; 这是可能的,如果是的话,怎么样?

如何将ExpandoObject的字典设置为不区分大小写?

给出下面的代码 dynamic e = new ExpandoObject(); var d = e as IDictionary; for (int i = 0; i < rdr.FieldCount; i++) d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]); 有没有办法让它不区分大小写,所以给定字段名称employee_name e.Employee_name与e.employee_name一样有效 似乎没有一个明显的方式,也许是一个黑客?

将事件附加到动态对象

我以下面的方式创建一个COM-Object的ac#动态对象: dynamic pdfCreator = Activator.CreateInstance( Type.GetTypeFromProgID(“PDFCreator.clsPDFCreator”)); clsPDFCreator类正在定义一个调用eReady的事件。 但是当我尝试注册一个类似的事件处理程序时 pdfCreator.eReady += _PDFCreator_eReady; 我收到错误消息“Operator’+ =’不能应用于’dynamic’和’method group’类型的操作数”。 如何将EventHandler注册到声明为动态对象的Event?

为什么C#dynamic解析内部属性而不解析方法?

我有一个包含以下类的库: public interface IEntity { string Foo { get; } void Bar(int x); } public class EntityFactory { public static IEntity createEntity() { return new Entity(); } } internal class Entity : DynamicObject, IEntity { public void Bar(int x) { Console.WriteLine(“inside Bar”); Console.WriteLine(“bar {0}”, x); } public string Foo { get { Console.WriteLine(“inside Foo getter”); […]

C#4会允许“动态铸造”吗? 如果没有,C#应该支持吗?

我不是指将更低的接口或基类转换为更多派生类的意义上的动态转换,我的意思是采用我创建的接口定义,然后动态地向该接口转换不是从该接口派生的不同对象接口但支持所有呼叫。 例如, interface IMyInterface { bool Visible { get; } } TextBox myTextBox = new TextBox(); IMyInterface i = (dynamic)myTextBox; 这可以在编译时针对已知类型实现,而运行时针对使用dynamic声明的实例实现。 接口定义是已知的,类型(在此示例中)也是如此,因此编译器可以确定对象是否支持接口定义的调用,并为我们执行一些魔术以进行转换。 我的猜测是C#4不支持这个(我无法找到它的引用),但我想知道肯定。 如果不是,我想讨论它是否应该包含在该语言的未来变体中,以及支持和反对的原因。 对我来说,似乎是一个很好的补充,可以在代码中实现更大的多态性,而无需创建全新的类型来包装现有的框架类型。 更新 为免有人指责我抄袭,我不知道Jon Skeet已经提出过这个问题 。 但是,很高兴知道我们想到了非常相似的语法,这表明它至少可能是直观的。 与此同时,“有一个独创性的想法”仍然在我的清单上再次出现。

有没有办法测试变量是否是动态的?

除非变量v为null否则以下代码将始终返回true: v is dynamic 并且以下测试将无法编译(“typeof运算符不能用于动态类型”): v.GetType() == typeof(dynamic) 那么有没有办法测试变量是否是dynamic ?

C#动态。 字符串属性路径

假设我有这些课程: internal class A { public B Field { get; set; } } internal class B { public int SubField { get; set; } } 有可能做这样的事情: var a = new A(); a.Field = new B(); a.Field.SubField = 10; dynamic d = a; var path = “Field.SubField”; var i = d.path; // How to look for […]

传输生成的XML文件而不保存到磁盘

我有一个大型Web表单应用程序,我希望允许用户导出他们的数据,以防他们不想一次完成整个表单。 然后当他们返回时,他们可以导入数据并继续他们离开的地方。 这样做的部分原因是客户端的要求是不使用任何数据库。 我已经达到了创建包含所有表单数据的XML文件的程度,但我希望客户端能够下载该XML文件,而无需将应用程序保存到服务器,即使是暂时的。 是否可以创建XML文件并通过流/附件将其传输到客户端而不将其保存到磁盘? 我正在使用C#Asp.net