【问题标题】:How to add properties at runtime dynamically to the object c#?如何在运行时将属性动态添加到对象c#?
【发布时间】:2020-06-25 10:05:09
【问题描述】:

下面是我正在尝试做的代码sn-p。

dynamic model = new ExpandoObject();
        foreach (Control control in ConfigData.ActiveForm.Controls)
        {
            string controlType = control.GetType().ToString();
            if (controlType == "System.Windows.Forms.TextBox")
            {
                TextBox txtBox = (TextBox)control;
                if (string.IsNullOrEmpty(txtBox.Text))
                {
                    MessageBox.Show(txtBox.Name + " Can not be empty");
                    return;
                }
                model[txtBox.Name] = txtBox.Text; // this gives error
            }
          

        }

这里我想创建一个属性,其值的名称来自 txtBox.name

例如,如果 textBox.name="mobileNo" 的值我想将名称为 mobileNo 的属性添加到模型中。该怎么做?

【问题讨论】:

  • 你应该试试 indexer 属性
  • 您需要先将它(模型)转换为IDictionary<string, object>,因为ExpandoObject 明确实现了它
  • 动态 obj= new ExpandoObject(); obj.NewProp=1;
  • 动态 obj= new ExpandoObject(); obj.NewProp= 1; @viveknuna 以及你将如何将txtBox.Name 用作NewProp
  • @Selvin 我参考了OP,他/她可以相应地使用

标签: c# asp.net .net


【解决方案1】:
dynamic expando = new ExpandoObject();

// Add properties dynamically to expando
AddProperty(expando, "Language", "English");

public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
{
    // ExpandoObject supports IDictionary so we can extend it like this
    var expandoDict = expando as IDictionary<string, object>;
    if (expandoDict.ContainsKey(propertyName))
        expandoDict[propertyName] = propertyValue;
    else
        expandoDict.Add(propertyName, propertyValue);
}

感谢 Jay Hilyard 和 Stephen Teilhet

来源:https://www.oreilly.com/content/building-c-objects-dynamically/

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2021-08-27
    • 2012-01-12
    • 1970-01-01
    • 2020-11-05
    • 2011-10-05
    相关资源
    最近更新 更多