簡體   English   中英

Re-Sharper在什么假設下會顯示“使用隱式類型的局部變量”消息?

[英]Under what assumption does Re-Sharper shows me “Use implicitly typed local variable” message?

以我的理解,C#開始是一種靜態語言,並且對.NET框架進行了一些增強,並開始支持該語言的動態性質。

我認為,在運行時加載DLL時,c#中的“ var”關鍵字非常強大,而且我們不知道即將到來的類型,它非常有幫助。

但是我認為,如果在設計時已將變量聲明為var,則會帶來確定變量類型的開銷。 現在,re-sharper負責通過提出一些不錯的建議使我們的代碼更加漂亮和整潔,這向我建議了以下內容:

我的代碼如下所示:

StatusResult result = new StatusResult();

Resharper建議將其轉換為

 var result = new StatusResult();

這是為什么? 當我認為這不是一個好主意時,為什么應該購買resharper的建議? 還是我錯了?

這主要是一個基於意見的問題,但是有一個值得解決的問題:將類型推斷與動態類型區別開來非常重要。

dynamic i = 0; i被聲明為動態變量,其類型僅在運行時解析。 這可能會導致開銷。

var i = 0; i被宣布為int var關鍵字僅意味着在編譯時由編譯器推斷變量類型。 因為var i = 1; ,所以沒有“設計時”類型推斷開銷var i = 1; int i = 1編譯為同一組指令。 它與動態類型無關。

關於你的問題

這是為什么? 當我認為這不是一個好主意時,為什么應該購買resharper的建議?

根據我的經驗,這是我的看法 一些專業人士接受這個建議:

  • 它有助於重構,因為StatusResult僅發生一次
  • 它縮短了行並刪除了多余的聲明,該聲明很容易被讀取代碼的人推斷出來
  • 打字少,編碼時行寫得更快

現在,如果代碼行是:

var result = GetStatusResult();  // A method call

我個人不會使用var,因為維護人員現在需要查看GetStatusResult()以查看var是什么。

歸根結底,這是個人決定,除非您必須遵循編碼標准,在這種情況下,您應該游說更改標准或只是遵循該標准。

作為旁注,正如Benesh在下面提到的,var!= dynamic。 我認為這是var get不好的地方。 加上上面提供的何時不使用示例的過度使用。

暫無
暫無

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

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