Здравствуйте! Я использую отражение для преобразования типа объекта A в эквивалентный тип объекта A2, эти два типа имеют одинаковые свойства и атрибуты, а для преобразования я использую следующую процедуру:
public static void CopyObject<T>(object sourceObject, ref T destObject)
{
// If either the source, or destination is null, return
if (sourceObject == null || destObject == null)
return;
// Get the type of each object
Type sourceType = sourceObject.GetType();
Type targetType = destObject.GetType();
// Loop through the source properties
foreach (PropertyInfo p in sourceType.GetProperties())
{
// Get the matching property in the destination object
PropertyInfo targetObj = targetType.GetProperty(p.Name);
// If there is none, skip
if (targetObj == null)
{
// targetObj = Activator.CreateInstance(targetType);
continue;
}
// Set the value in the destination
targetObj.SetValue(destObject, p.GetValue(sourceObject, null), null);
}
}
This отлично работает для простых объектов с эквивалентными именами свойств, но проблема в том, что объекты soruce и taget имеют любой тип ENUM.
Эта строка:
foreach (PropertyInfo p in sourceType.GetProperties())
Не возвращает объект PropertyInfo, поэтому l oop не запускается и изменения не вносятся, нет ошибок, просто не работает.
Таким образом, в любом случае необходимо преобразовать с помощью отражения один объект перечисляемого типа A в объект перечислимого типа А1 Я знаю, что что-то не имеет никакого смысла, но мне нужно это, чтобы адаптировать мой код и существовать в приложении, у которого нет исходного кода.
Идея такова:
Наличие двух enums
public enum A
{
vallue1=0,
value2=1,
value3=2
}
public enum A1
{
vallue1=0,
value2=1,
value3=2
}
и два объекта этих типов перечислений:
A prop1 {get;set;}
A1 prop2 {get;set;}
Мне нужно два получить значение перечисления prop1 и установить это значение в prop2, получая эквивалентное значение в второе перечисление, в общем случае c (поэтому я использую рефлексию)?
Заранее спасибо!