C#中如何使用反射将具有不同数据类型的属性设置为字符串值
反射是指托管代码可以通过读取自己的元数据来查找程序集。本质上,它允许代码检查同一系统中的其他代码。使用c#中的反射,我们可以动态地创建一个类型的实例,并将该类型绑定到一个现有对象。此外,我们可以从现有对象获取类型并访问其属性。当我们在代码中使用属性时,反射提供了访问权限,因为它提供了描述模块、程序集和类型的Type对象。
假设我们有一个double类型的属性,在运行时我们实际上有一个string值,并在更改类型后将其分配给该属性。我们可以使用Convert。ChangeType()——它允许我们使用关于任何可图像挂起类型的运行时信息来更改表示格式。
示例
using System; using System.Reflection; namespace DemoApplication{ class Program{ static void Main(){ Circle circle = new Circle(); string value = "6.5"; PropertyInfo propertyInfo = circle.GetType().GetProperty("Radius"); propertyInfo.SetValue(circle, Convert.ChangeType(value, propertyInfo.PropertyType), null); var radius = circle.GetType().GetProperty("Radius").GetValue(circle, null); Console.WriteLine($"Radius: {radius}"); Console.ReadLine(); } } class Circle{ public double Radius { get; set; } } }
输出结果
Radius: 6.5
在上面的示例中,我们可以看到,使用Convert.ChangeType将字符串值“6.5”转换为实际类型double,并在运行时使用反射将其分配给Radius属性。