使用反射设置Int32的值

时间:2009-08-12 09:24:58

标签: c# .net reflection

我想使用反射根据文件中的数据设置一些字段。我可以拥有的信息是TypeName,TypeValue和FieldName。

虽然这对于类(Activator.CreateInstance和PropertyInfo.SetValue)来说是微不足道的,但对于像Int32这样没有任何属性的值类型,我有点愚蠢。我看到IsValueType在那些类型上是真的,但由于我的TypeValue是一个字符串(即字符串TypeValue =“400”),我不知道如何分配它。

我是否必须使用GetMethods()来检查是否存在.Parse方法?这是适用于TypeConverter吗?

我知道我可以硬编码一些常见的值类型(反正没有那么多)并且有一个很大的switch()语句,但是我想知道是否有一些东西可以自动执行“Convert String to T”转换?

2 个答案:

答案 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。为什么这个方便?

  • 因为人们实际上可以指定转换器每个属性(下方) - 这在[{1}}上显示为prop.Converter
  • 如果文件很大,您可以使用HyperDescriptor
  • 来提升性能

作为具有自定义转换器的属性的示例:

PropertyDescriptor