我在VS2010上使用了ReSharper插件,並且我正在生成接口方法。 ReSharper將@放在參數名稱上。那是用來幹什麼的?C#@方法參數修飾符
int Count(Func<ContratoList, bool> @where);
請告訴我的
int Count(Func<ContratoList, bool> where);
感謝的區別!
我在VS2010上使用了ReSharper插件,並且我正在生成接口方法。 ReSharper將@放在參數名稱上。那是用來幹什麼的?C#@方法參數修飾符
int Count(Func<ContratoList, bool> @where);
請告訴我的
int Count(Func<ContratoList, bool> where);
感謝的區別!
@
符號允許您在變量名中使用reserved words。
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
正如馬克正確他的意見,他的回答中指出,實際上ReSharper的是錯誤要做到這一點,因爲where
是Contextual Keyword的,實際上並不是一個保留字,所以你的方法編譯沒有@
。
'的文章,其中***明確地不是*** a * reserved *關鍵字;它是一個*上下文*關鍵字。這意味着實際上,問題中的「@ where」達到了:完全沒有。 –
是的,你是對的。它確實表示,我在答案中包含的鏈接中,但是由於問題的原因,我認爲它與'where'是一樣的。我已經提出了你的答案,很好的發現! – Connell
Resharper過分熱衷於將@添加到事物中。 –
它允許您使用保留字作爲參數。
它允許您使用保留關鍵字作爲變量名稱。
這樣做是因爲「這裏」是在C#(LINQ)
它將停止此參數像個關鍵字保護的關鍵字(如where
是在LINQ關鍵字除其他事項外)。
它不會作爲該位置的關鍵字。 –
@Marc - 這是一個很好的觀點。它必須只是將其作爲一個通用規則來應用 - 試圖通過上下文完美地完成它將是我猜想的更多挑戰。 –
在許多方面,resharper是不對的做到這一點。 where
是上下文關鍵字,意思是:它只在某些特定場景(即LINQ)中充當關鍵字。在所表明的立場中,它實際上什麼都不做。它不會被混淆爲關鍵字,因爲當C#語言設計者向C#添加關鍵字時,他們需要確保預先存在的代碼繼續編譯(儘可能),並且這在早期的C#中是合法的。
的@
的使用也混淆了一些工具(剃刀,尤其/複雜,因爲剃鬚刀已經使用@
指示的代碼的開始 - 這意味着使用@
(即@string
)有時你需要@
,有時你的變量需要@@
- 我知道至少有一個錯誤的IDE警告可能會導致)。
但是!如果參數是if
或class
等,則@if
/@class
允許您將其用作變量名稱,而不是將其作爲C#關鍵字混淆。請注意,也是不是一個好主意。但出於同樣的原因,我們不會開始這樣做全部我們的代碼(string @name = ...
等) - 爲什麼在這裏?這是不需要的,並且由這個問題所示,它增加了混淆。
雖然我個人認爲參數名稱不是關鍵字或上下文關鍵字。
請看這篇關於'@'逐字運算符http://sanity-free.org/112/all_about_the_sign_csharp_verbatim_identifier.html – ja72