[英]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.