使用反射檢索變數名稱的任務引起了開發人員一段時間的興趣。編譯為 IL 後無法存取變數名稱是一項挑戰。然而,透過創造性的方法,可以利用反射來克服這個限制。
為了實現這一點,採用了表達式樹和閉包提升。表達式樹提供了一種以程式設計方式表示表達式的方法。透過將變數提升為閉包,您可以有效地保留其名稱。
以下程式碼示範了此技術的實作:
static string GetVariableName<T>(Expression<Func<T>> expr) { var body = (MemberExpression)expr.Body; return body.Member.Name; }
此方法採用一個表達式並檢索它所引用的變數。例如:
static void Main() { var someVar = 3; Console.Write(GetVariableName(() => someVar)); }
在此範例中,方法 GetVariableName 用於檢索變數 someVar 的名稱。
效能注意事項
值得注意的是,這種技術的計算成本可能很高。在執行期間建立和銷毀物件會增加垃圾收集壓力。此外,在幕後,調用了多種方法,並且大量使用了反射。因此,建議避免在效能關鍵的程式碼路徑中使用此方法。
以上是在 C# 中如何使用反射來檢索變數名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!