我想使用反射根据文件中的数据设置一些字段。我可以拥有的信息是TypeName,TypeValue和FieldName。
虽然这对于类(Activator.CreateInstance和PropertyInfo.SetValue)来说是微不足道的,但对于像Int32这样没有任何属性的值类型,我有点愚蠢。我看到IsValueType在那些类型上是真的,但由于我的TypeValue是一个字符串(即字符串TypeValue =“400”),我不知道如何分配它。
我是否必须使用GetMethods()
来检查是否存在.Parse方法?这是适用于TypeConverter
吗?
我知道我可以硬编码一些常见的值类型(反正没有那么多)并且有一个很大的switch()语句,但是我想知道是否有一些东西可以自动执行“Convert String to T”转换?
答案 0 :(得分:7)
// get the type converters we need
TypeConverter myConverter = TypeDescriptor.GetConverter(typeof(int));
// get the degrees, minutes and seconds value
int Degrees = (int)myConverter.ConvertFromString(strVal);
这应该有帮助
答案 1 :(得分:4)
ArsenMkrt是对的; TypeConverter
是前往这里的方式;但是还有一些额外的想法:
您可以考虑使用“组件模型”而不是反射;即代替typeof(T).GetProperties()
,考虑TypeDescriptor.GetProperties(typeof(T))
。这会为您提供一组PropertyDescriptor
条记录,而不是反射PropertyInfo
。为什么这个方便?
prop.Converter
HyperDescriptor
作为具有自定义转换器的属性的示例:
PropertyDescriptor