如何将盒子拆箱到具有未知类型的ICollection?

时间:2012-03-31 12:43:54

标签: c# unboxing icollection

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

1 个答案:

答案 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