首頁 > 後端開發 > C++ > 如何在 C# 中動態檢索變數名稱?

如何在 C# 中動態檢索變數名稱?

Patricia Arquette
發布: 2024-12-31 04:10:14
原創
134 人瀏覽過

How Can I Retrieve Variable Names Dynamically in C#?

動態檢索變數名稱:探索使用反射和C# 6.0 nameof 的替代方案

編譯為Intermediate 後取得變數的名稱語言(ILIL )是程式設計中常見的挑戰。在本文中,我們將深入研究如何利用反射來解決這個問題,反射是 .NET 中的一項強大功能,讓我們在執行時間檢查有關類型和成員的元資料。

反射的限制

最初,我們可能會考慮利用反射來檢索變數名稱。然而,值得注意的是,變數在編譯後不會在 IL 中保留其名稱。因此,僅依靠反射不會產生預期的結果。

輸入表達式樹和閉包:一種解決方法

儘管反射有局限性,但仍然存在一個巧妙的解決方法。透過使用表達式樹,我們可以將變數提升為閉包。該技術本質上在編譯時捕獲變數的上下文,允許我們稍後使用 GetVariableName 存取其名稱。方法。

實作和使用

這是示範此方法的範例:

此方法透過從正文中擷取MemberExpression 實例來操作所操作所提供的lambda 表達式。然後,MemberExpression 的 Member 屬性會儲存變數的名稱。

缺點和性能注意事項

雖然此解決方法規避了反射的限制,但它也帶來了性能缺陷。多個物件的創建、過多的不可內聯方法呼叫以及大量反射的使用可能會導致延遲。因此,建議避免在效能關鍵的程式碼路徑中使用此方法。

C# 6.0 的關鍵字名稱:更簡單的解決方案

隨著 C# 6.0 的出現,一個更直接的解決方案出現了:nameof 關鍵字。這個關鍵字提供了一種簡潔方便的方法來在編譯時存取變數、屬性或方法的名稱。

在我們原來的範例中,我們現在可以使用nameof 輕鬆檢索變數名稱,如下所示:

nameof 關鍵字提供與GetVariableName 方法相同的功能,但具有改進的功能

結論

在.NET中檢索變數名稱需要仔細考慮。雖然反射和表達式樹提供了在運行時獲取變數名稱的解決方法,但必須考慮它們的效能影響。相較之下,C# 6.0 的 nameof 關鍵字消除了這些效能問題,並為該任務提供了更有效的解決方案。

以上是如何在 C# 中動態檢索變數名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板