之后是否有办法更改属性名称? (C#)

时间:2017-12-25 14:53:20

标签: c# properties anonymous-types

例如,我正在尝试创建五个匿名对象以放入List,但我想以不同的方式命名属性,这可能吗?'

List<dynamic> myObjects = new List<dynamic>();
for(int i=0;i<5;i++)
{
     //do this
    var obj = new { Prop+i = "some value" };

       //or
    obj."somehow change property name here";

    myObjects.Add(obj);
}

因此,我的属性将命名为:Prop0,Prop1,Prop2,Prop3,Prop4

2 个答案:

答案 0 :(得分:3)

您可以使用ExpandoObject执行此操作:

List<dynamic> myObjects = new List<dynamic>();
for (int i = 0; i < 5; i++)
{

    dynamic obj = new ExpandoObject();
    obj.MyProperty = "some value";

    obj.ChangePropertyName = "change property name";

    myObjects.Add(obj);
}

但我不知道它是否对你有所帮助:)。

答案 1 :(得分:3)

正如后面提到的ExpandoObject可以解答您的问题,通过将ExpandoObject转换为IDictionary<string, object>,您可以将字典键视为属性名称:

List<dynamic> myObjects = new List<dynamic>();
for(int i=0;i<5;i++)
{
    dynamic obj = new ExpandoObject();
    //Add prop i property
    (obj as IDictionary<string, object>).Add("Prop"+i, "some value");
    //Remove prop i property
    (obj as IDictionary<string, object>).Remove("Prop"+i);
    //Add instead new property
    (obj as IDictionary<string, object>).Add("NewProp"+i, "some value");
    myObjects.Add(obj);
}