.NET 3.5 中 ExpandoObject 的替代品,开销最小

Posted

技术标签:

【中文标题】.NET 3.5 中 ExpandoObject 的替代品,开销最小【英文标题】:A substitute for ExpandoObject in .NET 3.5 with least overhead 【发布时间】:2011-06-24 10:54:36 【问题描述】:

如何以最少的开销在 .NET 3.5 应用程序中模仿 ExpandoObject 的功能?到目前为止,我最好的方法是使用 Lin Fu 框架 (http://www.codeproject.com/KB/cs/LinFuPart2.aspx),但我认为可能会有更好的方法。

为了更好地了解我的目标,我的目标是根据MethodInfo 的参数动态创建类型。所以,基本上我想转这个:

    public class ServiceObject
    
        public void Execute(string TransformMeIntoAProperty);
    

进入

    public class ServiceObjectExecuteSignature
    
        public string TransformMeIntoAProperty get; set;
    

在运行时。我必须能够使用反射访问参数,因为我使用的是 Linq 表达式。

【问题讨论】:

【参考方案1】:

您可以使用 CodeDom 在运行时动态编译一些新类型。显然,这样做是有前期成本的……我想这取决于您生成的类型的生命周期。

http://www.codeproject.com/Articles/26312/Dynamic-Code-Integration-with-CodeDom

http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx

http://igorshare.wordpress.com/2008/01/11/codedom-extensions-and-dynamic-linq-stringscript-to-linq-emitting/

【讨论】:

以上是关于.NET 3.5 中 ExpandoObject 的替代品,开销最小的主要内容,如果未能解决你的问题,请参考以下文章

ExpandoObject 的真正好处是啥?

如何在 ExpandoObject 的通用列表中搜索

反映在 ExpandoObject

ExpandoObject、DynamicObject 和 dynamic 的区别

如何使用 ServiceStack JsonSerializer 序列化 ExpandoObject?

向 ExpandoObject 动态添加属性