Как распаковать коробку на ICollection с неизвестным типом?

У меня есть объект IRecord, который может содержать объекты. Имя этих объектов сохраняется в сопоставлении как Свойства. Я перебираю свойства и извлекаю их из IRecord, выполняя

record[property]

Эти объекты всегда являются ICollections. Тем не менее, я не знаю, какой тип ICollection будет держать перед рукой. Как я могу распаковать объект в нужную ICollection, не зная, что будет содержать ICollection?

Приведенный ниже код является рабочей версией, если свойство record [является 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 ответ

Решение

Вы можете использовать.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

Другие вопросы по тегам