如何在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+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.