首页 > 解决方案 > 如何使用反射传递不同类型的属性值?

问题描述

使用反射,我使用类类型填充组合框,然后根据每个类的公共属性创建输入文本框。

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

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

标签: c#asp.netlinqreflection

解决方案


当您创建文本框时,在 foreach 循环中添加文本更改文本验证并直接指向该文本框的验证器。

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

只是让你知道它的 OnTextChanged


推荐阅读