C# 使用反射设置Int32的值

C# 使用反射设置Int32的值,c#,.net,reflection,C#,.net,Reflection,我想使用反射根据文件中的数据设置一些字段。我能得到的信息是TypeName、TypeValue和FieldName 虽然这在类(Activator.CreateInstance和PropertyInfo.SetValue)上是微不足道的,但对于像Int32这样没有任何属性的值类型,我有点目瞪口呆。我看到IsValueType在这些类型上是正确的,但由于我的TypeValue是一个字符串(即string TypeValue=“400”),我不知道如何分配它 是否必须使用GetMethods()检查

我想使用反射根据文件中的数据设置一些字段。我能得到的信息是TypeName、TypeValue和FieldName

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

是否必须使用
GetMethods()
检查是否存在.Parse方法?这是用于
类型转换器的吗

我知道我可以硬编码一些常见的值类型(反正没有那么多)并使用一个大的switch()语句,但我想知道是否有什么东西可以自动进行“将字符串转换为t”转换

// 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);

这应该有助于

ArsenMkrt是正确的
TypeConverter
是这里的方法;不过,还有一些额外的想法:

你可以考虑使用“组件模型”而不是反射;而不是<代码> Type(t).GePrimeStices()>代码>,考虑<代码> Type描述符.GETFACTS(Type of(t))< /C>。这将为您提供一组

PropertyDescriptor
记录,而不是反射
PropertyInfo
。为什么这个方便

  • 因为人们实际上可以为每个属性指定一个转换器(如下),所以在
    PropertyDescriptor
  • 如果文件很大,您可以使用
作为具有自定义转换器的属性的示例:

[TypeConverter(typeof(CurrencyConverter))] // bespoke
public decimal TotalPrice {get;set;}

是的,TypeDescriptor类是我一直在寻找的魔法,谢谢!