我有一个可以容纳对象的IRecord对象。这些对象的名称将作为“属性”保存在映射中。我遍历属性并通过
将它们从IRecord中取出record[property]
这些对象始终是ICollections。但是,我不知道ICollection将持有什么类型。如何在不知道ICollection将保持什么的情况下将对象拆箱到正确的ICollection?
如果记录[属性是IColletion,下面的代码是一个工作版本,所以我想改变它,它可以采取任何ICollection。
public ElectronicSignatureModel SignHierarchy(IRecord record, List<HierarchyMapping> mapping)
{
foreach (HierarchyMapping hierarchyMapping in mapping)
{
string[] propertyList = hierarchyMapping.Properties;
foreach (string property in propertyList)
{
ICollection<Sample> recordProperty = (ICollection<Sample>)record[property];
}
}
答案 0 :(得分:1)
您可以使用.NET反射动态获取运行时对象中属性的值。甚至可以使用它来调用方法或创建类实例。
您可以尝试以下代码:
foreach (string property in propertyList)
{
PropertyInfo pinfo = record.GetType().GetProperty(property);
var recordProperty = pinfo.GetValue(record, null);
}
“ recordProperty ”现在应该有正确的ICollection,然后你可以使用它。
您可以在此处阅读有关.NET反射的更多信息:
.NET中的反思 http://www.codeproject.com/Articles/55710/Reflection-in-NET
.NET Framework中的反思 http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.100).aspx