首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向ExpandoObject动态添加属性

向ExpandoObject动态添加属性
EN

Stack Overflow用户
提问于 2011-02-09 05:01:42
回答 4查看 131.3K关注 0票数 270

我想在运行时将属性动态添加到ExpandoObject中。例如,要添加一个调用NewProp的字符串属性,我想编写如下代码

代码语言:javascript
复制
var x = new ExpandoObject();
x.AddProperty("NewProp", System.String);

这很容易实现吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-09 05:05:36

代码语言:javascript
复制
dynamic x = new ExpandoObject();
x.NewProp = string.Empty;

或者:

代码语言:javascript
复制
var x = new ExpandoObject() as IDictionary<string, Object>;
x.Add("NewProp", string.Empty);
票数 556
EN

Stack Overflow用户

发布于 2015-10-16 03:37:31

正如Filip - http://www.filipekberg.se/2011/10/02/adding-properties-and-methods-to-an-expandoobject-dynamicly/所解释的那样

你也可以在运行时添加一个方法。

代码语言:javascript
复制
x.Add("Shout", new Action(() => { Console.WriteLine("Hellooo!!!"); }));
x.Shout();
票数 26
EN

Stack Overflow用户

发布于 2017-01-23 23:28:04

下面是一个示例助手类,它转换一个对象并返回一个Expando,其中包含给定对象的所有公共属性。

代码语言:javascript
复制
public static class dynamicHelper
    {
        public static ExpandoObject convertToExpando(object obj)
        {
            //Get Properties Using Reflections
            BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
            PropertyInfo[] properties = obj.GetType().GetProperties(flags);

            //Add Them to a new Expando
            ExpandoObject expando = new ExpandoObject();
            foreach (PropertyInfo property in properties)
            {
                AddProperty(expando, property.Name, property.GetValue(obj));
            }

            return expando;
        }

        public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
        {
            //Take use of the IDictionary implementation
            var expandoDict = expando as IDictionary<String, object>;
            if (expandoDict.ContainsKey(propertyName))
                expandoDict[propertyName] = propertyValue;
            else
                expandoDict.Add(propertyName, propertyValue);
        }
    }

用法:

代码语言:javascript
复制
//Create Dynamic Object
dynamic expandoObj= dynamicHelper.convertToExpando(myObject);
    
//Add Custom Properties
dynamicHelper.AddProperty(expandoObj, "dynamicKey", "Some Value");
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4938397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档