簡體   English   中英

在 C# 5.0 (NET Framework 4.5) 中替代 nameof

[英]Alternative to nameof in C# 5.0 (NET Framework 4.5)

我有一個插件,我在我的 DLL 中調用公共方法。 我有一個非常奇怪的場景,我需要動態(不是硬編碼)來獲取我正在調用的 DLL 方法的名稱,所以我正在嘗試使用 nameof 函數。

問題是它僅受 c# 6.0 支持,所以在 C# 5.0(NET Framework 4.5)中是否有任何替代方法?

例子:

ExecuteMethod(() => myCore.SomeMethod1(param1, param2), nameof(myCore.SomeMethod1));

Action (像所有其他委托類型一樣)有一個屬性Method ,它是一個MethodInfo ,包含您也可以通過引用獲得的信息。 因此你可以使用

ExecuteMethod(() => myCore.SomeMethod1(param1, param2), new Action<string,string>(myCore.SomeMethod1).Method.Name);

(假設兩個參數都是字符串。如果參數屬於不同類型,則更改泛型類型參數)

在線演示: https://dotnetfiddle.net/l9nOlX

這里最簡單的解決方案是:使用 C# 6(或更高版本)。 在 csproj 中,這是<LangVersion>屬性。 例如:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <LangVersion>6</LangVersion> <!-- or higher -->
        <!-- ... -->
    </PropertyGroup>
    <!-- ... -->
</Project>

只要您的構建工具是最新的,您就可以使用較新的 C# 版本和較早的 .NET 框架版本 - 這兩件事不是嚴格耦合的。

請注意,某些語言功能需要存在其他類型(例如,僅 init 成員),並且某些功能需要特定的運行時(例如,默認接口實現) - 但是,如果編譯器檢測到您正在嘗試使用 C#缺少它需要的東西的功能:它只會告訴你。 使用nameof不需要任何東西

請注意,IDE 現在故意將您的能力限制為 select 不尋常的語言版本,並且它不受嚴格支持- 但是:它在每個有趣的現實場景中都可以正常工作。 我不是“在循環中”的原因,但我推測這只是為了減少支持開銷,即問題 - 意思是:描述哪些功能可用變得更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM