如何使用反射传递不同类型的属性值?

时间:2019-03-27 10:10:35

标签: c# asp.net linq reflection

使用反射,我在填充一个具有类类型的组合框,然后基于每个类的公共属性创建用于输入的文本框。

考虑到每个类都有返回不同类型(字符串,浮点数,整数)的属性,我如何验证每种类型,将其从文本框中传递来创建传递给列表框的类实例?每个文本框必须采用不同的类型。

主要目标是将这些实例发送到列表框。 我正在学习反射和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 :(得分:0)

在创建文本框时,在您的foreach循环内,添加一个针对文本更改的文本验证,并直接指向该文本框的验证器。

当您处于foreach循环中时,您可以获取属性类型,该属性类型可用于将特定文本框的ontextchange事件指向正确的验证器。

只要您知道它的 OnTextChanged