C# .net8 ~ 傳入字串 轉換成 物件成員名稱並取回對應數值
C# .net8 ~ 傳入字串 轉換成 物件成員名稱並取回對應數值
資料來源: chatgpt
C#線上編譯: https://dotnetfiddle.net/
問題:
C# .net8 假設有一CLASS 如下 public class A { int a; int b; } 有辦法設計一個函數 傳入字串 轉換成 物件成員名稱 取並回對應範例
Code:
using System; using System.Reflection; /* 是的,在 .NET 8 / C# 中,你可以使用 Reflection 或 Expression Trees 來根據字串取出對應的物件成員(欄位或屬性)的值。 以下是一個使用 Reflection 的簡單範例,可從字串取得物件欄位的值: */ public class B { public int intResult; public B() { intResult=100; } } public class A { public int a; public int b; public B B1=new B(); } public class Program { public static void Main() { A obj = new A { a = 10, b = 20 }; Console.WriteLine(GetFieldValueByName(obj, "a")); // Output: 10 Console.WriteLine(GetFieldValueByName(obj, "b")); // Output: 20 Console.WriteLine(GetFieldValueByName(obj.B1, "intResult")); // Output: 100 Console.WriteLine(GetFieldValueByName(obj.B1, "intResul")); // null Console.WriteLine("End"); } public static object? GetFieldValueByName(object obj, string fieldName) { if (obj == null || string.IsNullOrWhiteSpace(fieldName)) return null; // BindingFlags to access public instance fields var field = obj.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.Public); if (field == null) return null; return field.GetValue(obj); } }