Как передать различные типы значений свойств с помощью отражения? - PullRequest
0 голосов
/ 27 марта 2019

Используя рефлексию, я заполняю комбинированный список типами классов, затем создаю текстовые поля для ввода на основе открытых свойств каждого класса.

Учитывая, что у каждого класса есть свойства, которые возвращают разные типы (string, float, int), как я могу проверить каждый тип, передать их из текстового поля для создания экземпляров класса, которые передаются в список? Каждое текстовое поле должно иметь разные типы.

Основная цель - отправить эти экземпляры в список. Я изучаю рефлексию и linq, поэтому я хочу сделать это, используя их.

Я пытался использовать этот словарь, но не могу использовать его для обработки нескольких типов свойств.

    private void OnButton1Click(object sender, EventArgs e)
    {
        Dictionary<string, string> populatedProperties = Controls.OfType<TextBox>()
                                                              .ToDictionary(x => x.Name, x => ValidateInputType(x.Text));

        User createdUser = (User)Activator.CreateInstance(selectedType);

        foreach (PropertyInfo property in selectedType.GetProperties().Where(x => x.CanWrite))
        {
            property.SetValue(createdUser, populatedProperties[property.Name]);
        }

        listBoxUsers.Items.Add(createdUser.ToString());
    }

// Я создаю текстовые поля, используя: int i = 50;

        foreach (var prop in selectedUserType.GetProperties().Where(x => x.CanWrite))
        {
            Controls.Add( new TextBox
            {
                Name = prop.Name,
                Location = new Point(150, 10 + i),
                Tag = prop
            });

            i = i + 40;
        }

// И проверяем:

    private string ValidateInputType(string input)
    {
        if (string.IsNullOrWhiteSpace(input))
            return "Input is null or White Space";
    }

Я ожидаю, что смогу передать эти различные свойства в listBox.

1 Ответ

0 голосов
/ 27 марта 2019

Внутри цикла foreach при создании текстового поля добавьте проверку текста при изменении текста и укажите прямо на валидатор этого текстового поля.

Пока вы находитесь внутри цикла foreach, вы можете получить тип свойства, который выможно использовать для указания события ontextchange определенного текстового поля на правильный валидатор.

Просто чтобы вы знали его OnTextChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...