Как распаковать коробку на 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