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