かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Visual Studio で一番費用対効果の高いショートカット「Ctrl + .」

今日は、Visual Studio 2019 Launch Event in Tokyo で登壇してきました。 資料はこちらです。

www.slideshare.net

とりあえず個人的に便利だと思ってる機能とかを中心に色々話したのですが、その中で一つだけ覚えてもらいたい機能として Ctrl + . のショートカットを紹介しました。

何が起きるの?

クイックフィックスを起動するショートカットになります。マウス操作でいうところの電球マークをクリックする操作になります。

f:id:okazuki:20190421214037p:plain

出来ること

色んなことが出来ます。

名前変更

前にも書きましたが編集名やクラス名の変更が出来ます。

blog.okazuki.jp

変えたい変数やクラス名を普通に変更して Ctrl + . を押して Enter。

f:id:okazuki:20190421214329g:plain

f:id:okazuki:20190421214422g:plain

個人的には Ctrl + R, Ctro + R より好き。

コンストラクターの生成から、引数を格納するフィールドやプロパティの生成

まずは、コンストラクターの生成。クラス名のところで Ctrl + . です。

f:id:okazuki:20190421215045g:plain

そしてコンストラクターの引数を追加して Ctrl + . でプロパティを生成して代入

f:id:okazuki:20190421215223g:plain

public に公開する必要がなければフィールドに格納という選択も可能です。

f:id:okazuki:20190421215441g:plain

さらに null チェックや、文字列の場合は空文字チェックなどが追加できます。

f:id:okazuki:20190421215601g:plain

クラス名をファイル名に合わせる

例えば Person クラスを作って Employee クラスにリネームしたいときにはクラス名を変えて、ファイル名を変えて…といった感じの作業が必要です。 これがファイル名とクラス名があってないとクラス名をファイル名に合わせて変えてくれます。

f:id:okazuki:20190421215812g:plain

名前空間をフォルダー名に合わせる

例えば今までプロジェクトのルート名前空間に置いといたとして、数が増えてきて名前空間をわけたいときとかファイルをフォルダーに移動して名前空間を修正します。 これがフォルダーに移動したあと、該当ファイルの名前空間のところで Ctrl + . をするとフォルダー名に合わせてくれます。

f:id:okazuki:20190421220113g:plain

インターフェースや抽象メソッドの実装

インターフェースや抽象クラスを実装したり継承すると、クラスにメソッドを実装しないといけません。 これも Ctrl + . で実装してくれます。

f:id:okazuki:20190421220334g:plain

クラスの using の補完

まだ using してない名前空間のクラス名を入力したら Ctrl + . で using が追加できます。

f:id:okazuki:20190421220524g:plain

不要な using の削除

using でいらないものがたくさんあるときに消してくれます。

f:id:okazuki:20190421220620g:plain

拡張メソッドに必要な using の追加

LINQ とかの Where や Select みたいな拡張メソッドも using が足りないと追加してくれます。

f:id:okazuki:20190421220744g:plain

メソッドのシグネチャーの変更

引数の順番が気に入らないな…というときも

f:id:okazuki:20190421221040g:plain

LINQ にしてやんよ

foreach だと…?

f:id:okazuki:20190421221254g:plain

新しい書き方への変換

LINQ への変換もそうですが、例えば最近追加されたタプルや、破棄といった書き方への変換も対応しています。

f:id:okazuki:20190421221516g:plain

他にも throw 式への変換とか

f:id:okazuki:20190421221801g:plain

メソッドボディが 1 ステートメントしかないときは => への変換とか。

f:id:okazuki:20190421222436g:plain

逆の方向への変換もしてくれるので、とりあえず 1 ステートメントのときは式木体にしておいて、処理追加のタイミングで Ctrl + . で普通の { ... } に戻して処理追加とかできます。

存在しないメソッドやプロパティの生成

存在しないメソッドやプロパティを呼ぶコードを書いたら生成してくれます。

f:id:okazuki:20190421221912g:plain

typo の修正

軽い typo なら修正してくれます。例えば以下の例では InitializeInitOlize と typo したのを修正してくれてます。

f:id:okazuki:20190421222043g:plain

NuGet の参照の追加

NuGet で、まだ参照に追加してないクラスを使うと参照の追加もしてくれます。(どの範囲を検索してくれてるのかはちょっと未確認ですが…) 例えば Json.NET の JsonConvert を使おうとして、まだ NuGet 追加してないのですが追加してくれてます。参照追加後、ちゃんと using も追加してくれてます。

f:id:okazuki:20190421222232g:plain

プロパティをメソッドに変換

書いてる途中に気づいたのですが、プロパティをメソッド呼び出しにしてくれます。あまり使わないのですが副作用のある getter を作ってしまったときとかはメソッドにすることもあるかな??

f:id:okazuki:20190421222841g:plain

ということでまとめ

普段あまり使わない機能もありますが(LINQ へ変換とか…) 、普段コードを書いてるとき結構な頻度で Ctrl + . で Visual Studio にコードを書いてもらってます。 もう、電球が出る前に Ctrl + . を押して Enter をしてコードを生成してるので、素早くやると何もしてないのにコードが生えてきたみたいに見えることもあるかも?

とりあえず色々楽できる、個人的に一番費用対効果の高いショートカットです。是非使ってみてください。