Resharper上手指南

 

Resharper進階一:簡要介紹

官方下載地址下載地址 

註冊碼:

用戶名: User
註冊碼:D9d09DSYJel9IyuDU4btAQwZcbLugUad

  面對這樣一個問題:爲什麼.net能夠比java更加快速的完成開發?恐怕最大的優勢在於Microsoft提供了一個無比強大的IDE。它的強大在於適用於各個層次的開發人員。當你還是一隻小小鳥的時候,可以學會drag&drop,當你開始寫代碼的時候,你會發現設計器生成的代碼是多麼愚蠢和臃腫。當你自己能夠寫出乾淨的代碼時,可能再也不想切換到設計器中去了(切換/F7)。我相信我們中的大部分人,即使是最資深的Windows 開發人員,用VS寫代碼比用記事本的效率要高很多,因爲我們畢竟需要IDE的幫助以提高我們的生產力。但是在那個沒有Resharper的年代裏,你的生產力頂多停留在兩個輪子的時代,另兩個輪子,只有在你熟悉了Resharper以後才能轉動起來。
 
  Resharper能帶給你的效率提升如此之高,以至於在我訂閱的所有.net專家的blog裏面,所有的人都在關注它。要知道他們都不是一般的coder,大多數是CTO或者技術總監。當我三個月前開始使用Resharper時,想要搜到一些中文的介紹,或者是經驗性的文章卻十分困難。大多數人似乎不關心它的存在。博客園裏充斥着因爲安裝Resharper而拖慢系統,導致VS不穩定,機器響應速度下降,VS啓動速度下降等等的論調。幸運的是,這些在我這裏都沒有遇到,也許是因爲 2G的內存的緣故,反正devenv.exe所佔的200~300m內存並沒有使我感覺機器在變慢,而且我的VS幾乎是一直運行中,沒有一會關閉一會打開的時候,所以我只需要忍受Resharper在加載時的半分鐘初始化一次就夠了。相比於它能帶給你的效率提升,這些問題都是微不足道的(一家之言)。
 
  如果你在VS環境下寫代碼時幾乎不用快捷鍵,那我覺得你沒有必要往下看了。因爲Resharper是通過快捷鍵來提升你的效率的。但是相信我,如果你曾經在星際中一遍一遍被人虐的話,你應該能體會到快捷鍵帶來多麼大的變化。
 
  首先在安裝完Resharper之後,你主要通過三種方式用到或看到它:
 
  一是在菜單欄上,如果是3.0版本的話,它會默認的屏蔽掉“重構”菜單欄,也就是說你按Alt+R的時候,彈出的是Resharper的下拉菜單而不是 “重構”,爲什麼?因爲你不再需要“重構”菜單了。如果是以前版本,比如2.0,似乎需要您手工的完成這一步,方法如下:
 
工具——自定義——重排命令,然後把“重構”菜單刪除,毫不猶豫地!
 
  你可以簡單地這樣體驗一下:Alt+R,N,回車,就可以在當前項目中添加一個類,還記得以前你是怎麼做的嗎?在解決方案資源管理器中選中一個項目,然後右鍵,在長長的彈出菜單中選擇:添加——類,如果你的電腦夠慢的話,在3秒鐘之後纔會彈出一個對話框來問你文件名。
 
  另一種方式是:看到豎直滾動條了嗎?在它的右邊多出一個邊框來,上方是一個“綠色/黃色/紅色”的方框,而邊框上會出現一道一道紅的橙的橫槓。什麼意思:當紅槓出現時,表明你的代碼在那個位置出現了錯誤,如果是橙槓,表明那是一個警告,多半是沒有檢測null值或者聲明後未使用之類。
 
  如果當前文檔的所有錯誤和警告都得到了適當的處理,則不會再出現橫槓,而最頂上的方框也會變成綠色;
 
  如果沒有錯誤但有警告,則是黃色,這時編譯可以通過;
 
  如果那個方框是紅色,則表示有編譯通不過的錯誤,這時你應該通過點擊紅槓,去修改您的代碼。如果你即使編譯,也會報錯並無法生成。這樣做使你在寫代碼時就能及時得發現你的錯誤,而不需要等到編譯時。這樣做也使你的效率得到了提高。因爲編譯至少要耗去您半分鐘的時間,並且強烈的讀寫您的硬盤,特別在你的硬盤轉速慢時,比如筆記本上,這一過程是那麼的令人心痛。
 
  第三種接觸到Resharper的自然是快捷鍵了。右鍵菜單當然也有很多的功能,但是那太弱智了,太慢了。我們需要的是專業,我們用的工具定位不是打毛衣的大媽,而是開發的專業人員,如果你連快捷鍵都無法掌握,那真的得對你的開發技巧打一個大大的問號。試想一下這個場景,當你腦子裏冒出這個念頭,啊,這個類,應該提出接口來,要這個方法,這個,和這個,還有這兩個事件。啊,不行,我現在就得提,不然就忘了。我得新建一個接口,點哪個來着。啊,在哪裏新建……建好了,對了我要提取哪幾個方法來着。(我暈死)許多時候你的念頭都是一閃而過的,需要你的操作也相應的跟上。這個操作在Resharper就是,把光標移動到類名上,然後點Ctrl+Shift+R,除了你想要的提取接口,其他的重構功能也一目瞭然。而且遠比VS自帶的要快。
 
  至於右鍵,如果你剛開始實在記不住快捷鍵,只能使用它了,或者Alt+R,實際上它也要比右鍵菜單快一點點。
 
  真正激動人心的是在隨着你逐漸熟悉Resharper以後,能夠帶來的諸多方便之處,我將會在接下來的一系列隨筆中講述。
 
Resharper進階二:快速定位

摘要
 
快速代碼定位的核心就是三個功能:
 •    轉到定義:Ctrl+B;
•    查找所有使用:Alt+F7;
•    從這裏瀏覽:Ctrl+Shift+G.

轉到定義

  當你的光標在一個變量上時,按下Ctrl+B就會跳轉到這個變量聲明的地方。這可能是某一個字段,某一個方法的參數或者一個局部變量。
 
  當你的光標在一個類型上時,按下Ctrl+B可能發生兩種情況,一是當這個類型的定義在你的項目中有源代碼時,會跳轉到這個源代碼文件。如果沒有源代碼,則會打開一個對象瀏覽器。有一些使用者更期望跳轉到元數據文件,但是我更喜歡對象瀏覽器,這樣類型的公有屬性、方法、事件都被列出來了,可以一目瞭然。就我的經驗,列表永遠比下拉框,選框更加易於查找。

  但是這個功能有一個副作用,多年使用Windows的經驗告訴我們,按住Ctrl的時候點鼠標左鍵,默認的操作是選中一整個單詞,但是在安裝了 Resharper以後,這個操作實際上等於Ctrl+B,也就是說可能你想選擇這個變量的名字,然後複製到別處去,可是卻跳轉到了這個變量的聲明處,不由得讓你一陣惱火。目前我還沒有找到選項屏蔽掉這個操作,所以,只有用鼠標雙擊來選擇單詞了(提示:如果跳轉到了別處,想返回,按Ctrl+-)
 
查找所有使用
 
  Alt+F7,有感覺嗎?不錯,就是TotalCommand裏搜索的快捷鍵,沒有用過TC,還在用資源管理器?那可不應該。簡而言之, Alt+F7將你光標所在位置的變量的所有使用以列表的方式顯示出來,顯示結果的窗體可以像其他窗體那樣停靠。
 
它的優點包括:
 •可以從所有使用中挑選只顯示read usage或者write usage,有時我們只是想知道某個變量在哪裏被改變了。找到的位置前的圖標也告訴你這點。
•可以在下方預覽,即使我們列出所有使用,也不想跳轉到每個使用它的地方,這時預覽可以幫你大忙。
•當你在代碼編輯器中改動了某些使用時,比如刪除了某行,那麼在查找結果的窗體中,會用刪除線表示出來。
•默認的是尋找解決方案中所有的使用,並且按照命名空間來組織,非常便於選擇。

 
我現在已經記不起來在沒有Alt+F7之前我是怎麼查找的。反正現在我幾乎不怎麼樣Ctrl+F了,除非我忘記了某個變量的名字。如果是這樣,多半這個名字需要refactor,那也是Resharper的另一大塊功能所在。也許有人對這個功能嗤之以鼻,但是用過CAB的人都知道,訂閱和發佈某個事件的簽名,完全是字符串,如果你不用搜索來找到它的話,你都不知道這個控件的鼠標點下去,到底有多少個處理程序在背後開始工作了。用了 Alt+F7來搜索這個字符串,等於在查找背後所有的調用者。
 
不過提示你,當光標停留在一個類型上時,要慎用Alt+F7,假設是一個string,你應該能想象到得找到多少個使用。
 
從這裏瀏覽
 
實在不知道用什麼中文來翻譯這個navigate from here...,只好直譯了。你可能在這些時候需要它:
 
當你要找這個類的所有繼承者,或者接口的所有實現者時,按住Ctrl+Shift+G會彈出一個菜單,其中有Inheritor,用方向鍵來選擇並回車,如果只有一個實現,那麼直接跳轉到這個實現,如果有多於一個,或者因爲使用了partial分佈到好幾個文件中,會再彈出一個菜單來供你選擇。與此類似,如果你選擇base,則會跳轉到基類或接口中去。
 
同時這個功能也囊括了前面的轉到定義和查找使用,如果你偷懶的話,只記住這個就可以了,雖然Ctrl+Shift+G的快捷鍵有一點生僻,但是用着用着你就發現順手了。
 
這個功能不可不謂是用來熟悉一套框架的利器,可以讓你迅速找到某個接口的所有實現,和Alt+F7合用,可以讓你在一個龐大的解決方案中如魚得水。
 
下一次,我們該來講一講威力無比的Alt+回車了

 
Resharper進階三:快速完成

  常常寫代碼的人,應該都對Visual Studio的智能感知有一定的好感,通過它,在輸入比較長的對象名稱時不覺得吃力了。恐怕這是.net平臺比其他平臺的代碼更加易讀的一個因素,因爲每個變量名稱都比較有意義,而不是晦澀的varIdx,pElemDisp之類了。儘管這樣看起來很酷。
在沒有Resharper之前,Visual Studio的自動完成功能就很強大了。只是它定義的快捷鍵實在是讓人不順手。Alt+右方向鍵,我怎麼都無法不低頭按它倆。於是我把快捷鍵改成了Ctrl+;(分號)這樣按起來方便多了。
  Resharper則在Visual Studio的基礎上又增添了一些功能。比如說,在原生的自動完成中,關鍵字,比如private,override這些,是沒有提供自動完成的(有嗎,我已經不記得了)。還有這下面一些,則是Visual Studio原生確實沒有的:
當你寫一個新的字段時,比如string _field; Resharper會自動地在前面爲你加上private,也許有的人覺得多餘,但我覺得是應該的。
當你輸入foreach的時候,模板會自動的出現,方便你輸入集合還有子項的類型與名稱,回車之後就進入到塊中。這類的模板你可以自行定義,並在團隊中共享。這樣在處理某些特定的場景時,代碼的執行基本一致。
  在你需要輸入{的時候,Resharper能夠自動的爲你加上},並且光標位於其中,如果你敲回車鍵,兩個括號和你準備接下來要寫的塊內的代碼都縮進對齊了。這個功能遠遠不只說起來那麼簡單,當你發現自己可以因此忘記每次括回去的時候,是多麼的愜意。
同理,在你輸入[或者(的時候,Resharper也如此爲你添加成對的括號。
這樣也有不方便的時候,比如你在調用某個方法的時候,其實你只是想輸入(,然後開始寫參數,再寫),然後寫分號,可是它偏偏幫你寫了,特別是當參數還是一個字符串的時候,你輸入",它又自動的幫你寫了",並且把光標置於其間,好多時候搞得你很惱火。因爲你要敲end鍵挪到行尾,再寫;,而end鍵也很難在你不低頭的情況下按準。實際上,這時你的選擇還不如老老實實寫上"),也比敲end來的快。所以爲方法自動的添加括號的功能,只有在不帶參數的情況下使用才最愜意。
總的說,自動完成函數的輸入工作,還是一個很實用的功能,現在你需要輸入ToString()的話,只需要最多敲四個了ToS和;就可以了,其他的部分Resharper都自動爲您完成。
最後再賣弄一下,將自動完成的快捷鍵換成Ctrl+;的話真的非常棒,即使你沒有安裝Resharper,也可能考慮把原生的快捷鍵更改掉。在我所有用的電腦上,我都偷偷的把Ctrl+;添加進去了。因爲這兩個鍵實在是太好摁了。
 
Resharper進階四:萬能的Alt+Enter

萬能的Alt+Enter能夠幫你完成很多編寫代碼過程中的dirty work,總結起來大概是這麼些:

 •幫你實現某個接口或抽象基類的方法;
•提供你處理當前警告的一些建議;
•爲你提供處理當前錯誤的一些建議(不一定是真的錯誤);
•爲你簡化當前的臃腫代碼;


  幫你實現某個接口或抽象基類的方法

  這個功能Visual Studio也已經幫你提供了,就是每次你在類名的後面加上:ISomeInterface的時候,它會提示你按Tab鍵就生成接口中所有方法的存根。如果你這時沒按,後來,你還可以把鼠標懸停在這個接口名,會出現一個小小的,小的不能再小的,費死勁才點得中的智能感知符上,然後生成方法。在安裝了 Resharper以後,這個功能被視爲與其它警告一樣的處理辦法。如果你:ISomeInterface以後,又沒有實現它的方法,這一行代碼會打上波浪號,表示有警告或者錯誤發生。按下Alt+Enter,則會爲你生成這些方法。
不要覺得我小題大作,在你修改了ISomeInterface這個接口以後,比如添加了一個Initial方法,這時最快的辦法是:在ISomeInterface上點Ctrl+Shift+G瀏覽到這個接口的實現類,然後Alt+Enter,這個類中立即就添加了Initial這個方法,並可開始編寫代碼。

提供你處理當前警告的一些建議

有的時候你可能會忽略的一些細節,Resharper不會忽略,比如你用了隱式類型轉化:

 
Button btn = sender as Button;      //隱式類型轉化
 
  而沒有接下來檢測它是否爲空,就直接使用。這時Resharper會提示你一個警告。如果你按下Alt+Enter,它會把你之後的代碼包括在一個if語句中:

 
if (btn != null)
{
  //你接下來的代碼
}
 
不過令我不滿意的是,我時常要的是這樣的效果:

 
if (btn == null)
 return;
 
不知道這個行爲能不能在配置中修改。

爲你提供處理當前錯誤的一些建議

被Resharper標記爲紅色的即爲錯誤了,有時錯誤也可能是你有意爲之。比如你隨意地在View.cs中寫下了:

 
_presenter.GetAllLayers();
 
而實際上你的Presenter.cs中還沒有這個方法,那麼按下Alt+Enter就會立即在Presenter.cs中添加這個方法,並跳轉到該方法,如果Presenter不止分佈在一個文件中,會彈出對話框讓你選擇。相比於Visual Studio經常臃腫的對話框,Resharper的彈出對話框往往十分直接,你只需立即用方向鍵選你需要的並回車。

爲你簡化當前的臃腫代碼

你的代碼如果被Resharper視爲多餘的,那麼會以灰色標識出來,例如:

 
this.Text = "標題欄文本"   //this爲灰色
btnOK.Click += new EventHandler(btnOK_Click)  //new EventHandler爲灰色
 
  多餘的代碼並無害,只是顯得不那麼簡潔,如果你頭一次在安裝了Reshaper之後打開你之前編寫過的代碼會發現大量的灰色代碼。如果你查看設計器生成的代碼,會發現Reshaper的豎直條几乎變成了橙色的一條了。基本上,你都可以用Reshaper爲你自己的代碼瘦瘦身,設計器產生的,比如窗體,或者Dataset還是不要動的好。

Resharper進階五:高效的代碼結構調整

  通過我之前介紹過的Alt+F7和Ctrl+B,你可以很快的在一個代碼文件中知道函數的調用情況。但是有的時候,代碼文件非常複雜,裏頭有幾十個函數都算是小兒科,甚至一個構造函數就有N多個重載。這時你想清楚的瞭解文件中各個函數,屬性,字段,事件等等,就不是那麼輕而易舉的事情了。
 
在Visual Studio中,你可以通過這些方式組織或審視你的代碼:
 
  用region,這是最常使用的,我最喜歡的分法是:Field, Property, Event, EventHander, 然後根據實際情況,Constructors(如果構造函數重載多的話),Helper(如果有許多公用的流程的話),再就是跟某個特定任務想關聯的一系列方法組成一類。
當你用region把你的代碼組織好了以後,確實顯得很簡潔。但是問題來了,當一個同事check了你的代碼,然後準備修改,這時,他想要理清你的思路,於是在你的代碼裏開始奮戰,啊,這個調用了那個,噢,這個地方可以接受0個或者1個或者三個參數……過了一個小時,他總算可以開始寫他要改的那個部分了。region的缺陷就是讓寫的人很明白,而讀的人還是很費勁。

用對象瀏覽器可以把你的方法結構展現出來,但致命的是它是按照字母排序的,對於我們中國人來說,實在是難以找到像 FilterSelectableLayerByName這樣一個其實自說明性很強的方法來。而實際上你又把它裝進了一個“圖層控制”的region裏面,而你的讀者卻無法參透你的用意來。(如果你常常下載codeproject上的代碼的話,會知道這種事情常有。)

說了這麼多,其實就是想把對象瀏覽器和region的長處結合起來,既可以清晰的分類,又能一目瞭然的找到需要的方法。Resharper這時幫上你的大忙了。用Ctrl+F12,就彈出一個像右邊這樣的窗口來。
 
這裏面,按照你的region來顯示,這樣讀你的代碼的人也受益了。每個方法的參數,返回值都如UML一樣列出來。
 •如果需要瀏覽到某個方法,直接雙擊它的名字;
•如果要把某幾個方法裝進一個新的region,則可以選中方法,點工具欄上的像框的那個圖標;點叉則會刪除這個region並把相應的方法移到外面來。
•如果要調整某個方法的位置,比如把它移到別的region裏面去,只需要在這裏拖動這個方法即可。

•更可喜的是,你想要的從這裏瀏覽、找到所有使用和重構的功能也在這裏提供了,在某個方法上右鍵你就能開始操作。

這絕對是Resharper裏面最酷的功能,你快打開Visual Studio試一試吧。

 
Resharper進階六:重構纔是王道(上)

重構是一種精神,證明你在致力於提供高效的、精煉的、健壯的代碼,而不是凌亂的、晦澀的、漏洞百出的代碼。
在Visual Studio 2005中,微軟第一次提供了重構工具。但是不夠,遠遠不夠。我們需要的重構是非常廣義的,我們想要對代碼進行快速的調整,快到我在想什麼我的工具就能做什麼。這纔是追求重構的境界。所以在這個意義上,幾乎Resharper爲你提供了巨大的生產力。

Visual Studio 2005提供的重構包括瞭如下:

 1.封裝字段
2.提取方法
3.提取接口
4.提升局部變量
5.移除參數
6.重命名
7.重新排列參數

這些方法在Resharper中全部都支持(但Resharper的重構遠不止這些),它們對應的變成了:

 1.封裝字段 —— Introduce Field
2.提取方法 —— Extract Method
3.提取接口 —— Extract Interface (另增加了Extract Superclass提取爲基類)
4.提升局部變量 —— Introduce Variable
5.移除參數 —— 移到Change Signature(改變方法簽名)中
6.重命名 —— Rename (Resharper會根據對象的類型名稱,提供你幾個可選的最合適的名稱)
7.重新排列參數 —— 移到Change Signature(改變方法簽名)中

我知道很多人都聲稱自己E文不好,但是,這確實都是很簡單的單詞,難不倒任何人的。這些重構的功能是人所共知的,下面就告訴大家一些Resharper特有的,首先,重構的快捷鍵是Ctrl+Shift+R:

1、對於類,除了提取接口、基類,你還可以移動它到其他的命名空間和移動到別的文件裏,這是一個實用的功能,也許你不信,但是我這真的有個人,把所有的business entity都寫在一個DataObject.cs裏面。你難以想象,我打開它時嘴張了多大。

2、對於字段,提供了:

 •Safe Delete,會檢測所有使用到的地方,並詢問如何刪除;
•Pull Member Up和Push Member Down,可以把這個字段在基類和繼承類中移動;
•Use base type where possible,儘可能的使用基類,由於ArcGIS平臺是基於com組件的,很多時候我們需要的是IGeometry, IPointCollection這樣的接口所公開的屬性或者方法,於是你沒有必要保存一個polygon對象,而可以使用基類型;
•Encapsulate Field,封裝字段,但是這個功能遠沒有另一個提供同樣功能的操作有用。我可以在後文中來講。

3、對於方法,提供了:

 •與字段類似的功能,此外;
•Change Signature,更改函數簽名,包括更改名稱,返回值類型,參數的各種信息,添加和刪除參數,相當實用。如果你是在重寫方法上操作,會提示你是否到基類中更改。
•Make Static,如果Resharper檢測到這個方法並沒有與非靜態成員相關聯的話,往往會自動地提示你(以黃色橫槓的形式出現)可以改爲static,如果你自作主張的對一些方法進行修改也無不妥,但後果自負。
•Extract class from parameter,如果你的參數有七個八個,那是否考慮用一個類來封裝這些參數呢,於是這個功能應運而生。
•Method to Property,顧名思義,如果還在使用GetField()或者SetField(..)的話,你一定是從非.net星來的。

4、在方法體內部:
Extract Method,不用介紹了吧。
Introduce Variable/Parameter/Field,取決於你光標所在的對象,可以提供轉化的功能。
Inline Variable:就是把:

 
IPoint point = new PointClass();
point.PutCoords(_point.X, _point.Y);

 
變成這樣子:

 
new PointClass().PutCoords(_point.X, _point.Y);  //這是個糟糕的例子

5、重命名:
爲什麼重命名值得挑出來講,因爲Resharper提供了命名建議這一金子般的功能。於是,想改名爲易讀性強的名字,不是那麼費腦子的事情了。Resharper會根據這個變量的類型,爲你提供幾個備選名字,名字列表是列在光標位置上的(對方法重命名會彈出對話框),你只需要用方向鍵選擇並敲回車即可,這種名字多是將類型的名字首字母改爲小寫得來的,甚至刨根到基類的類型名,你還可以在此基礎上加以改進。如果你還在用i,j這種晦澀的名稱,請迅速的把他們改爲outIndex, pointCount之類可讀的名稱。
Resharper其實提供了更先進的功能,在你命名一個變量時,就有快捷鍵爲你提供備選名字,但是Ctrl+Space是我們寶貴的輸入法切換鍵,於是,我對變量名的敲定,往往是先起了一個較爛的,然後重命名的。

還有一些更廣義上的,幫助你對代碼進行調整的功能,我另寫一篇吧,不然太長了。

 
Resharper進階七:重構纔是王道(下)

插入代碼
Resharper的Alt+Insert快捷鍵提供給你插入代碼的功能。由於這兩個鍵非常難按(這是我的感受),真正在使用的時候,我用的是Alt-R-C-G,意指打開Resharper菜單——Code——Generate,都只需要你的左手,這樣你可以右手一邊比劃,一邊還在寫代碼,多酷啊。

 •生成的代碼中最常用的是構造函數和屬性,當你沒有私有字段的時候,只會生成一個空的默認構造函數,而且沒有生成屬性的功能。在你有私有字段的情況下,生成之前會讓你選擇哪些私有字段需要作爲構造函數的參數,並生成初始化的代碼,這樣編寫重載極其方便。生成屬性也類似。
•再次常用的就是重寫基類或者接口的方法了。選擇Implement Interface Member或者Override Inheritate Member,Resharper會查找當前類的基類或接口,然後按繼承層次列出來,根據你的選擇重寫或實現這些方法。
• 不是太常用的是生成Equals和GetHashCode方法,在我的應用場景中很少重寫它們。但是根據《.NET設計規範》,不管是值類型還是引用類型的Equals都建議重寫,並且應該重寫GetHaseCode方法,因爲它們相互依賴。如果你有這個需求,那麼生成這三個函數一定能夠幫你的大忙。

包圍代碼
Visual Studio也提供了外側代碼這個功能,你可以按Ctrl+K,Ctrl+S來激活這個功能,雖然我並沒有任何鄙視Visual Studio的意思,但是Resharper的快捷鍵確實更加合理(我在按下Ctrl的時候真的很難按下S),條目也更加清晰。Resharper中這個功能的快捷鍵是Ctrl+Alt+J,然後你就可以選擇將當前行的代碼包圍到try-catch塊或者using中了。這是很高效的方法,我們傾向於在開發的早期儘量不捕獲異常,而在中後期才加入異常處理機制。於是你某一個時期有大量的工作是把他們擴到try-catch塊中。而你要使用支持 dispose對象時,最好的方法是使用using塊。(賣蛋糕的,當我知道我的代碼不是最優的時候,我總是寢食難安),這裏自然也有把代碼擴到 region塊中的功能,也是常用功能之一。

調整方法的位置
前面我曾說過,如果要調整方法的位置,可以在代碼結構窗口中拖放操作。如果你覺得只是把一個方法移動到前面去,卻不得不打開代碼結構窗口太過重量級,那麼有輕量級的方法:當光標位於方法的名稱上時,用Ctrl+Shift+上下鍵就可以移動方法的位置,包括方法的xml註釋,但如果你用的不是三個/的xml註釋而是兩個/的,那麼就對不起了。

其他瑣碎的功能
你肯定常常會複製粘貼當前行的代碼,例如在使用StringBuilder.Append的時候,Ctrl+D可以簡化你Ctrl+C,Ctrl+V的工作。
曾經有一個組合鍵可以註釋掉當前行,還有另一個是取消註釋,但是我已經淡忘了,因爲Ctrl+/才應該是真正屬於它的快捷鍵,再次按下就可以取消註釋。

關於Resharper的重構功能就是這些,我可能天真地把很多額外功能都算在重構裏了,但是它確實能夠幫助你快速的對代碼進行調整和優化。所以,請不要深究我對重構的概念認識是不是混亂。

 
Resharper進階八:增強的瀏覽功能

瀏覽參數的方式
  輸入方法的時候,我們已經習慣了由IDE提供給我們的參數提示,極大了方便了我們選擇重載方法。在沒有 Resharper的環境下,Visual Studio已經做到了。那麼爲什麼Resharper還要增強這個功能並大獲好評的。試問,Visual Studio那窄窄的一行參數提示有沒有讓你覺得憋屈。我們有19寸的大屏幕,1600的分辨率,卻不得不盯着那窄條條,小心翼翼的按着上下鍵尋找我們需要的重載。至少,開發Resharper的傢伙是受不了這種憋屈的,於是大開大闔版的參數列表出現了,長長的參數重載被以列表的形式展現出來,當你在使用 GDT+方法,看到巨大的參數重載時,你會從心底裏發出感嘆:賣蛋糕的。
同時,Resharper展示參數的快捷鍵變成了Ctrl+P,如果你覺得屏蔽了打印的快捷鍵簡直是在開玩笑的話,那麼問問你自己有多少次打印過自己的代碼。

瀏覽打開過的文檔
  我竊以爲你已經知道了在Visual Studio中切換文檔的方式,它們包括:
Ctrl+Alt+上下方向鍵,可以在打開的文檔中切換;
Ctrl+Tab,不僅可以在文檔之前切換,並可以切換到解決方案文件夾,屬性視圖去,需要按左右鍵。
但是怎麼樣打開最近編輯後關閉的文件呢,Visual Studio很客氣的又沒有提供此功能,於是留給了Resharper。在我這裏這個快捷鍵是Ctrl+E,Ctrl+E,沒錯,按兩次。如果你的不是,那麼在Resharper-View-Recent Files菜單下看看它是什麼。因爲你會時常用到。打開一個文件的列表,用方向鍵選擇並回車就會在編輯器中打開。
很多人說Resharper的性能問題,我想,一個可能的原因是打開的文檔太多了,如果你有時刻關閉不需要的文檔的習慣,性能或許不會那麼差,並且你可以隨時打開這些你關閉了的文檔,就像在已經打開的文檔中切換一樣的方便。
我的團隊中沒有用到敏捷開發那些高級的東西,但是我們還是保持着每次改動都僅涉及兩三個文件的好習慣,並且頻繁的commite到源代碼服務器上去。所以,我每次真正要編輯的文件不多,性能不是問題。

  和大家分享了很多Resharper使用的技巧,點點滴滴都已經融入我日常的開發工作中了。當然很不全面,例如與Nunit的集成,由於我們不是測試驅動,所以沒有任何體驗,自然也不敢大放厥詞;也很主觀,我覺得它好,你可能覺得它不好,蘿蔔青菜各有所愛。再說,它也不是沒有白癡的地方,在文檔上點右鍵增加的一個Close All功能,可以關閉所有打開的文檔,關閉了幹什麼,對着一個空白的屏幕發呆麼?我覺得原生的“除此之外全部關閉”就夠了。還有一個定位的功能(Locate in Solution Explorer),真是沒用,如果你在VS選項中設置了,在解決方案管理器中跟蹤活動項,那麼VS自動就給你定位了。
不管怎麼說,它帶給我更快更方便的開發體驗,把我從一些瑣碎的,不人性化的功能中解放出來。從這一點上來說,我很希望越來越多的人喜歡上它,開始用它,並幫助它更好的發展。

發佈了21 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章