簡體   English   中英

有沒有辦法為 C# 中的 nameof 運算符創建包裝器(或別名)

[英]Is there a way to create a wrapper (or an alias) for the nameof operator in C#

我經常在 C# 中使用nameof運算符。 所以我想知道,有沒有辦法為這個運算符創建一個更短的版本(包裝器或別名),比如_(Identifier)而不是nameof(Idenfier) 更多細節:我需要創建長字符串數組,如var columns = new[] { nameof(Property1}, nameof(Property2), ... } 。我想讓代碼更短一些,如var columns = new[] { _(Property1), _(Property2)...} . C# 中是否有使這成為可能的功能?

你不能那樣做!

即使你可以,用這樣的東西:

private static string N(Expression<Func<object>> expr) => ((MemberExpression)expr.Body).Member.Name;

考慮到它的用法,它不會真的有效:

var name = N(() => myVariable);

而且這樣的事情會很慢,

因為一旦你用nameof()編譯你的代碼,它就會把你的名字像一個普通的字符串一樣,考慮這個例子:

var myname = "awdawda";
1.Console.WriteLine(nameof(myname));
2.Console.WriteLine(N(() => myname));

對於第 1 行,生成的 IL 是這樣的:

    IL_0012: ldstr        "myname"
    IL_0017: call         void [System.Console]System.Console::WriteLine(string)
    IL_001c: nop

在編譯時只是一個普通的字符串,但是如果你看第 2 行,你會看到:

在此處輸入圖像描述

你能看到它為一個名字造成的混亂嗎?

綜上所述,我建議您繼續使用nameof() ,或創建某種源代碼生成器來為您工作,這將更難實現。

暫無
暫無

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

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