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

问题描述 投票:0回答:2

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

c# properties anonymous-types
2个回答
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);
}

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);
}

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

© www.soinside.com 2019 - 2024. All rights reserved.