c# - 如何使用反射传递不同类型的属性值?
问题描述
使用反射,我使用类类型填充组合框,然后根据每个类的公共属性创建输入文本框。
考虑到每个类都有返回不同类型(字符串、浮点数、整数)的属性,我如何验证每种类型,将它们从文本框中传递以创建传递给列表框的类实例?每个文本框必须采用不同的类型。
主要目标是将这些实例发送到列表框。我正在学习反射和 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。
解决方案
当您创建文本框时,在 foreach 循环中添加文本更改文本验证并直接指向该文本框的验证器。
当您在 foreach 循环中时,您可以获得属性类型,您可以使用该属性类型将特定文本框的 ontextchange 事件指向正确的验证器。
只是让你知道它的 OnTextChanged
推荐阅读
- javascript - 按类选择所有节点,不包括按父 ID 的特定容器
- angularjs - 禁用 ng-repeat 列表中的链接
- c++ - 如何同时使用两个 CameraCaptureUI (UWP / C++)
- nvidia-digits - NVDIA DIGITS 安装中的属性错误
- cordova - 在 phonegap 构建中,如果我在构建时使用 onesignal-cordova-plugin 和 cordova-plugin-googlemaps 它显示错误
- c++ - C ++向下转换结构
- ms-word - 如何防止 Word 加载项在重新启动 Word 时消失?
- c# - 如何在不更新当前视图的情况下将部分视图发布到控制器?
- ruby-on-rails - 回形针的替代品,因为它已被thoughtbot 弃用
- python - 按多列分组的问题(每次的行数不同)