如何在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屬性。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP