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,存檔
你的 if template 看起來就「比較」正常一點了
輸入 myStringAbc 的過程,intellisense 就會正常了。
補充
因為這個 bug,反而讓我把 postfix template 的使用方式內化了。先打 expression,才接 template 的作法。
參考
在 2018 年八月,剛更新完 ReSharper 發現這問題時,我就發了個 issue 給 JetBrains,隨後自己找到了解決方式,也順便學到了不少技巧。有興趣的朋友可以參考一下當時的 issue:ReSharper 2018.2, C#, template if only listing bool member
blog 與課程更新內容,請前往新站位置:http://tdd.best/