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

Is there a way to change property name afterwards? (c#)

例如,我正在尝试创建五个匿名对象以放入 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

您可以使用 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);
}

不过不知道对你有没有帮助:)

正如 Backs 提到的 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);
}