【发布时间】:2023-03-15 16:11:01
【问题描述】:
C# 使得get all public properties 或get a property value by name 变得相对容易。
但是设置属性值呢?对于一个简单的测试应用程序,我希望能够做类似这个伪代码的事情,它枚举类实例上的公共属性,提示用户输入值,并根据这些值设置属性 - 根据需要从输入字符串转换为属性类型:
for(Property p in typeof(instance))
{
s = ReadLine("Enter the value for {p.Name}, type {p.Type}");
SetPropertyValue(instance,p.Name, p.Type.parse(s));
}
我遇到的使通用实用程序方法SetPropertyValue 变得困难的主要问题是Parse 并不总是存在。它适用于大多数基本类型,但当然不适用于 string 或更高级别的类型。
我不介意它在不支持的类型上失败,因为我的使用基本上是int、short、string、byte 等,但是我如何使用反射来敲击某些东西准备好控制台模式测试应用了吗?
【问题讨论】:
-
您可以使用TypeConverter 和
TypeDescriptor来解决这个问题。也许System.Convert在这里也很有用。
标签: c# reflection