如何将框取消装箱为未知类型的ICollection

本文关键字:未知 类型 ICollection 取消装箱 | 更新日期: 2023-09-27 18:29:33

我有一个可以容纳对象的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];
            }
        }

如何将框取消装箱为未知类型的ICollection

您可以使用.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