質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

1396閲覧

分岐部分に書かれている処理を、すべてのcase毎に一括してメソッド化する方法を探しています

necos

総合スコア52

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/03/13 10:40

編集2018/03/13 10:41

教えていただきたいこと

下記の様なswitch-case文があるときに、分岐内の処理を「一括」でメソッドとして切り出す方法や、そういった機能を持ったツールをご存知でしたら教えて頂きたいと思っています。

やりたいこと

  • case毎に書かれている処理を、メソッドとして単純に切り出したい
  • 大量にあるので、一つ一つ手作業でやると時間がかかるので、一括で切り出したい

経緯、状況の説明

  • 既存のコードの分析をしています。
  • とにかく一覧性が低いので、Case毎にメソッドとして切り出したいと思っています。
  • VisualStudioやResharperにあるExtractMethod機能は、一回の手順で、一つしか切り出せないので、何かよい方法はないか探しています。
  • なお、切り出した際のメソッド名は、仮でもかまいません。
  • コードすべてを文字列として読み取り、自動整形して吐き出すプログラムを組むことも考えましたが、書き方に統一性がなく、パターンとして抜き出す方法を探る時間がもったいないと思い、断念しました。。

サンプルコード

switch(str) { case "A": // //複数行の処理、行数は不定 // break; case "B": // //複数行の処理、行数は不定 // break; case "C": // //複数行の処理、行数は不定 // break; case "D": // //複数行の処理、行数は不定 // break; //以下、超大量のcaseが続く }

使用しているツール

  • Visual studio communty 2015
  • Resharper Ultimate 2017.3.1

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

VisualStudioを使っているのであれば、メニューの
編集 -> 詳細 -> ドキュメントのフォーマットとかCtrl+K,Dとかで、
自動でインデントが合うと思いますので、
"case"で探すのではなく、
" case"というようにインデント付きで探せば
目的のcaseだけ取れないですかね。

投稿2018/03/14 03:42

sh_akira

総合スコア380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

case から break までなので何か適当なスクリプトで簡単にできそうな気がします。
break の無いところは手動で break を入れればいいでしょう。

投稿2018/03/13 10:50

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

necos

2018/03/13 13:02

回答ありがとうございます。 提示して頂いた方法を試そうとしたのですが、case文の中に更にswitch文、if文が入っていて、そこでbreakしていたりと、一筋縄ではいきません、、、地道に時間をかければ、辿り着けそうではありますが、使い捨てになりそうなツールに時間を使えるかというと、難しいのが現状です。。 せっかく回答頂いたのに、このような返信で申し訳ありません、、
Zuishin

2018/03/13 13:05 編集

case と同じインデントのものを目標の break と判断してみては? いや、同じではなく一つ深いものでした。
necos

2018/03/14 08:07

なるほど。同じbreakでも、インデント付でということであれば、指定ができそうですね。 試してみます。ありがとうございました。
guest

0

コードすべてを文字列として読み取り、自動整形して吐き出すプログラムを組むことも考えましたが、書き方に統一性がなく、パターンとして抜き出す方法を探る時間がもったいないと思い、断念しました。。

という状況の解決をツールに求めてもですねぇ。
かなり優秀なAI搭載でも、チューニングが必要でしょうから、結局は人手に頼るしかないのではないでしょうか。

投稿2018/03/14 05:32

sazi

総合スコア25186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/03/14 05:35

そんなことはないでしょう。 Roslyn を使えば可能です。 この質問の場合は汎用性が必要ないのでインデントと case break を使ってもっと簡単にできますが。
sazi

2018/03/14 08:10 編集

統一性が無いとういことだったので、ある程度の統一性を持たせるためにはソース解析が必要で、それだったらその都度メソッド抽出した方が手っ取り早いと言うことになるかと思いました。 Roslynというのは知りませんでした。調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問