Как распаковать коробку на ICollection с неизвестным типом? - PullRequest
1 голос
/ 31 марта 2012

У меня есть объект 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 Ответ

1 голос
/ 31 марта 2012

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

...