如何在运行时添加到对象的未知List属性?

时间:2015-07-24 06:48:00

标签: c# dynamic reflection properties gettype

我有一个'Profile'对象/类,其IList为'Addresses',其中,我只会在运行时通过GetType()/ GetProperties()等知道它们的类型[profile / addresses],尽管我希望to。添加到此列表中,例如:

var profile = session.Get<ProfileRecord>(1);

dynamic obj = new ExpandoObject();
obj = profile;
obj["Addresses"].Add(addressNew);

由于以下原因,这不起作用:

  

无法将带有[]的索引应用于类型的表达式   'Test.Models.ProfileRecord'。

我一直在看IDictionary,但是我的尝试都没有成功,甚至不知道我是否应该沿着这条路走下去 - 那么正确的方法是什么呢?这整个概念对我来说都是新的,所以请不要过度假设我的能力;)非常感谢提前。

1 个答案:

答案 0 :(得分:1)

如果你不知道个人资料的类型,你可以这样做。

var prop = profile.GetType().GetProperty("Addresses").GetValue(profile);
prop.GetType().GetMethod("Add").Invoke(prop, new object[] {1}); // Add the Value to the list

但是你必须确保List已经被初始化了。

但我认为您应该能够直接投射对象并设置属性:

if(profile.GetType == typeof (ProfileRecord))
{
    var record = (ProfileRecord)profile;
    if (profile.Addresses == null)
    {
         profile.Addresses = new List<Address>();
    }

    prfile.Addresses.Add(addressNew);
}