Подтвердить что ты не робот

Метод GetProperties с BindingFlags.Public ничего не возвращает

Наверное, глупый вопрос, но я не мог найти никаких объяснений в Интернете.
Какова конкретная причина, по которой этот код не работает? Код должен скопировать значения свойств из Contact (source) в новый экземпляр объекта ContactBO (destination).

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, он внезапно возвращает все. Я был бы признателен, если бы кто-то мог пролить свет на это, потому что я потерялся.

4b9b3361

Ответ 1

Из документации метода GetProperties:

Необходимо указать либо BindingFlags.Instance, либо BindingFlags.Static, чтобы получить вернуться.

Ответ 2

Это поведение объясняется тем, что вы должны указать либо Static, либо Instance в BindingFlags. BindingFlags - это перечисление флагов, которое может быть объединено с помощью | (побитовое или).

Что вы хотите:

.GetProperties(BindingFlags.Instance | BindingFlags.Public);