如何在C#中使用反射设置具有不同数据类型和字符串值的属性?


反射是指托管代码可以读取自身的元数据以查找程序集。本质上,它允许代码检查同一系统内的其他代码。在C#中使用反射,我们可以动态创建类型的实例并将该类型绑定到现有对象。此外,我们可以从现有对象获取类型并访问其属性。当我们在代码中使用属性时,反射为我们提供了访问权限,因为它提供了描述模块、程序集和类型的Type对象。

假设我们有一个double类型的属性,在运行时我们实际的值是字符串,并在更改类型后将其赋值给该属性。我们可以使用**Convert.ChangeType()** - 它允许我们使用任何IConvertible类型的运行时信息来更改表示格式。

示例

 在线演示

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

在上面的例子中,我们可以看到字符串值“6.5”使用Convert.ChangeType转换为实际的double类型,并在运行时使用反射赋值给Radius属性。

更新于:2020年9月24日

1K+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告