Возможно, это глупый вопрос, но я не смог найти объяснений в Интернете.
Какова конкретная причина того, что этот код не работает?Предполагается, что код копирует значения свойств из Contact
(исходный) в недавно созданный объект ContactBO
(конечный).
public ContactBO(Contact contact)
{
Object source = contact;
Object destination = this;
PropertyInfo[] destinationProps = destination.GetType().GetProperties(
BindingFlags.Public);
PropertyInfo[] sourceProps = source.GetType().GetProperties(
BindingFlags.Public);
foreach (PropertyInfo currentProperty in sourceProps)
{
var propertyToSet = destinationProps.First(
p => p.Name == currentProperty.Name);
if (propertyToSet == null)
continue;
try
{
propertyToSet.SetValue(
destination,
currentProperty.GetValue(source, null),
null);
}
catch (Exception ex)
{
continue;
}
}
}
Оба класса имеют одинаковые имена свойств (класс BO имеетнесколько других, но они не имеют значения при инициализации).Оба класса имеют только общедоступные свойства.Когда я запускаю приведенный выше пример, destinationProps
и sourceProps
имеют нулевую длину.
Но когда я расширяю метод GetProperties
с помощью BindingFlags.Instance
, он неожиданно возвращает все.Буду признателен, если кто-нибудь сможет пролить свет на этот вопрос, потому что я заблудился.