1

我有一个可以容纳对象的 IRecord 对象。这些对象的名称作为属性保存在映射中。我遍历属性并通过执行将它们从 IRecord 中取出

record[property]

这些对象始终是 ICollections。但是,我不知道 ICollection 将持有什么类型。如何在不知道 ICollection 将持有什么的情况下将对象拆箱到正确的 ICollection?

如果 record[property 是 ICollection,则下面的代码是一个工作版本,所以我想将其更改为它可以采用任何 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];
            }
        }
4

1 回答 1

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 框架中的反射 http://msdn.microsoft.com/en-us/library/f7ykdhsy(v=vs.100).aspx

于 2012-03-31T13:03:50.513 回答