ReSharper 2018.2 issue: if 的 intellisense 只列出 Boolean 的清單

ReSharper 在 2018.2 的版本之後,if 的 template 有個 bug,當輸入 if 時,intellisense 只會出現屬於 bool 型別的清單,而這跟一般寫代碼的習慣差很多。例如,可能是要判斷某個集合IsAny(),或是日期與數字是否大於某個值。

這篇文章帶著大家怎麼透過 ReSharper Template Explorer 暫時解掉這問題。

問題描述

原本使用 ReSharper 或 Visual Studio if 的 template 時,intellisense 會跳出在目前範圍內合適的清單,包括能用的 filed, variable, method 等等。ReSharper 2018.2 版之後,if 的 intellisense 只會列出目前能用的 Boolean 型別 member,如下圖所示:

如果你想要判斷的,是 myStringAbc.Length > 0,就得自己打完完整的 variable 名字。

這跟過去的習慣與功能不同,所以影響到不少人的開發方式。

暫時解決方式

在暫時解之前,我想帶一些更前面的資訊:為什麼 if template 的 intellisense 可以列出這些清單?

其實 JetBrains 寫了不少巨集(marco)給 template 用,這個 intellisense 就是透過巨集去篩選出來合適的清單,現在的 bug 事實上是很聰明的直接幫我們篩選出 boolean 的清單。那我們該怎麼修復這個巨集上的 bug 呢?

很簡單,透過 ReSharper 的 Template Explorer,找到 if template,把它目前用的巨集改掉就好。

在 Visual Studio 快速啟動的部份,輸入 template explorer,並點選。

找到 C# 的 if template, double click

找到 Parameters > expr 的巨集連結,會看到只篩選出 boolean 的巨集是 Execute smart completion

點連結,把巨集改成 Execute basic completion,存檔

在這邊你也可以找到 ReSharper 幫你做好了不少有趣的 marco,當你想建立自己的 template 時,就可以找找看有沒哪些 marco 讓你的 template 更絢麗一點。

你的 if template 看起來就「比較」正常一點了

輸入 myStringAbc 的過程,intellisense 就會正常了。

補充

因為這個 bug,反而讓我把 postfix template 的使用方式內化了。先打 expression,才接 template 的作法。

參考

在 2018 年八月,剛更新完 ReSharper 發現這問題時,我就發了個 issue 給 JetBrains,隨後自己找到了解決方式,也順便學到了不少技巧。有興趣的朋友可以參考一下當時的 issue:ReSharper 2018.2, C#, template if only listing bool member


或許您會對下列培訓課程感興趣:

  1. 2019/7/27(六)~2019/7/28(日):演化式設計:測試驅動開發與持續重構 第六梯次(台北)
  2. 2019/8/16(五)~2019/8/18(日):【C#進階設計-從重構學會高易用性與高彈性API設計】第二梯次(台北)
  3. 2019/9/21(六)~2019/9/22(日):Clean Coder:DI 與 AOP 進階實戰 第二梯次(台北)
  4. 2019/10/19(六):【針對遺留代碼加入單元測試的藝術】第七梯次(台北)
  5. 2019/10/20(日):【極速開發】第八梯次(台北)

想收到第一手公開培訓課程資訊,或想詢問企業內訓、顧問、教練、諮詢服務的,請洽 Facebook 粉絲專頁:91敏捷開發之路