Visual Studioの赤い波線からコードを自動生成|Studentクラスをマウス操作で作ってみよう

広告

Visual StudioでC#を書いていると、まだ存在しないクラスやメソッドに赤い波線が表示されることがあります。

今回は、その赤い波線を「入力ミス」として直すのではなく、クイックアクションを開く入口として利用します。最初に使いたいコードを書き、Visual Studioに不足しているクラスやメソッドを生成してもらう流れを、5枚の画面で順番に確認しましょう。

使うコードを書き、赤い波線からクイックアクションを開いてコードを生成し、エラーのない状態にする5段階の流れ
使うコードから不足しているクラスやメソッドを生成し、エラーのない状態まで進める流れ

この記事で学ぶこと

  • 赤い波線からエラー内容を確認する方法
  • クイックアクションでStudentクラスを生成する方法
  • 呼び出し側のコードからコンストラクターやプロパティが作られる仕組み
  • 存在しないShowScoreメソッドを生成する方法
  • 赤い波線がない状態までコードを完成させる流れ

用語の確認
入力候補を表示するIntelliSenseと、赤い波線から修正候補やコード生成を提示するクイックアクションは、どちらもVisual Studioがコーディングを支援する機能です。この記事では、主にクイックアクションのコード生成を使います。

事前準備:練習用プロジェクトを作成する

操作を試すために、Visual StudioでC#のWindowsフォームプロジェクトを用意します。授業でほかの教材と区別しやすいように、今回は次の名前を使用します。

  • ソリューション名:StudentQuickActionPractice
  • プロジェクト名:StudentQuickActionSample
  • 言語:C#
  • プロジェクトの種類:Windows フォーム アプリ

Visual Studioで[新しいプロジェクトの作成]を開き、C#の[Windows フォーム アプリ]を選びます。授業で.NETのバージョンが指定されている場合は、その指定に合わせてください。プロジェクトを作成したら、Form1.csを開いて練習を始めます。

スクリーンショットの名前空間について
この記事のスクリーンショットは、作成済みのSampleプロジェクトで撮影したため、コードがnamespace Sampleになっています。新しくStudentQuickActionSampleという名前でプロジェクトを作成すると、通常はnamespace StudentQuickActionSampleになります。名前空間が画像と異なっていても、今回のクイックアクションやコード生成の操作には影響ありません。

1.まず「使う側」のコードを書く

Windows FormsのForm1コンストラクターに、次の1行を書きます。

Student student = new Student("山田", 80);

この時点では、まだStudentクラスを作っていません。そのため、型名とコンストラクター呼び出しのStudentに赤い波線が表示されます。

Studentクラスが未定義のため、2か所のStudentに赤い波線が表示されたVisual Studioの画面
図1:最初に1行だけ入力した状態。Studentクラスがまだないため、赤い波線が表示されています。

ここで大切なのは、赤い波線が出ても、すぐに全部を手入力しようとしないことです。まずはVisual Studioが何を知らせているのかを確認します。

2.赤い波線にマウスポインターを合わせる

赤い波線が付いているStudentにマウスポインターを合わせます。すると、エラー番号CS0246と、「型または名前空間の名前 'Student’ が見つかりませんでした」という説明が表示されます。

Studentにマウスポインターを合わせ、CS0246のエラー説明と修正ボタンを表示した画面
図2:赤い波線にマウスポインターを合わせると、エラーの意味と[修正]が表示されます。

対応バージョン:Visual Studio 2010以降
未定義の型やメンバーを使用箇所から作る「Generate from Usage」は、Visual Studio 2010で導入されました。Visual Studio 2010~2013では、現在とは異なるスマートタグやエラー修正の画面から実行します。
Microsoft公式:Visual Studio 2010のconsume-firstワークフロー

電球アイコンからクイックアクションを開く方法

赤い波線がある行にカーソルを置くと、行の左側に電球アイコンが表示されることがあります。このアイコンをマウスでクリックして、クイックアクションの一覧を直接開く方法もあります。

Visual Studioの電球アイコンからクイックアクションを開き、型Studentを生成する項目を表示した画面
電球アイコンをクリックし、[型 'Student’ を生成する]を選ぶ方法

メニューには[暗黙的な型の使用]や[インラインの一時変数]など、別の修正候補も表示されます。今回は不足しているクラスを作りたいので、[型 'Student’ を生成する]を選びます。キーボードを使う場合は、赤い波線の位置でAltEnterを押して同じ一覧を開くこともできます。

エラー説明の[修正]、または電球アイコンから開いたメニューで、Studentを生成する操作を選びます。Visual Studioのバージョンやプロジェクトの状態によって、候補の表現や生成先の選択肢は少し異なることがあります。

対応バージョン:電球型のクイックアクションはVisual Studio 2015以降
現在のように電球アイコンから修正やリファクタリングを選ぶ画面は、Visual Studio 2015で導入されました。Visual Studio 2026では、設定により電球アイコンを左余白ではなくコード内へ表示できます。そのため、バージョンによってアイコンの位置が異なります。
Microsoft公式:Visual Studio 2015リリースノートMicrosoft公式:Visual Studio 2026リリースノート

3.Studentクラスを自動生成する

コード生成を選ぶと、Visual Studioはnew Student("山田", 80)という呼び出し方から、必要な形を逆算します。

  • Studentというクラスが必要
  • 1つ目の引数はstring
  • 2つ目の引数はint
  • 2つの値を受け取るコンストラクターが必要
  • 値を保持するNameScoreが必要
クイックアクションがStudentクラス、NameとScoreプロパティ、コンストラクターを生成するプレビュー
図3:生成されるStudentクラスのプレビュー。[保持する]を選ぶと変更がコードへ反映されます。

[保持する]をクリックすると、次のようなコードが追加され、最初のStudentの赤い波線が消えます。

public class Student
{
    public string Name { get; }
    public int Score { get; }

    public Student(string name, int score)
    {
        Name = name;
        Score = score;
    }
}

対応バージョン:クラス・コンストラクター・プロパティの生成はVisual Studio 2010以降
Studentの使用箇所から、クラス、コンストラクター、プロパティなどを生成できます。生成される名前、コードの形、確認画面は、Visual StudioやC#のバージョンによって異なる場合があります。

4.まだ存在しないShowScoreを呼び出す

次に、作成したstudentから点数を表示するメソッドを呼び出してみます。

student.ShowScore();

しかし、生成されたStudentクラスには、まだShowScoreメソッドがありません。そのため、今度はShowScoreに赤い波線が表示されます。

student.ShowScoreのShowScoreに赤い波線が表示されたVisual Studioの画面
図4:ShowScoreを先に呼び出した状態。Studentクラスはありますが、メソッドはまだありません。

5.ShowScoreメソッドも生成する

ShowScoreの赤い波線にマウスポインターを合わせると、エラー番号CS1061と、「StudentにShowScoreの定義が含まれていない」という説明が表示されます。

ShowScoreにマウスポインターを合わせ、CS1061のエラー説明と修正ボタンを表示した画面
図5:ShowScoreのエラーから[修正]を開き、メソッド生成へ進みます。

[修正]から「メソッド 'ShowScore’ を生成します」を選ぶと、Studentクラス内にメソッドの骨組みが追加されます。

public void ShowScore()
{
}

呼び出し側と定義側の形がそろったため、これだけでもShowScoreの赤い波線は消えます。最初の1行を入力したあとは、赤い波線から候補を開き、選択する操作を中心にクラスとメソッドの骨組みを作れたことになります。

対応バージョン:メソッドの生成はVisual Studio 2010以降
未定義のメソッドを呼び出し、その使用箇所からメソッドの骨組みを作る機能も「Generate from Usage」に含まれます。Visual Studio 2015以降では、電球型のクイックアクションから実行できます。

最終的なエラーのないコード

コード生成だけで赤い波線を消すところまで進めると、全体は次のようになります。

using System.Windows.Forms;

namespace Sample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Student student = new Student("山田", 80);
            student.ShowScore();
        }
    }

    public class Student
    {
        public string Name { get; }
        public int Score { get; }

        public Student(string name, int score)
        {
            Name = name;
            Score = score;
        }

        public void ShowScore()
        {
        }
    }
}

実際に点数を表示する処理を加える

自動生成されるのは、基本的にクラスやメソッドの骨組みです。メソッドに何をさせるかは、自分で書きます。Windows Formsで名前と点数をメッセージとして表示するなら、ShowScoreの中を次のようにします。

public void ShowScore()
{
    MessageBox.Show($"{Name}さんの点数は{Score}点です。");
}

コンソールアプリのConsole.WriteLineのように確認したい場合

コンソールアプリでは、途中の値を確認するときにConsole.WriteLineを使います。

Console.WriteLine($"{Name} の点数は {Score} 点です。");

しかし、Windows Formsアプリでは通常、コンソール画面が表示されません。開発中に名前や点数を確認したいときは、Debug.WriteLineを使うとVisual Studioの[出力]ウィンドウへ表示できます。

ファイルの先頭に、次のusingを追加します。

using System.Diagnostics;

ShowScoreメソッドは、次のように書けます。

public void ShowScore()
{
    Debug.WriteLine(
        $"{Name} の点数は {Score} 点です。",
        "スコア"
    );
}
Debug.WriteLineでStudentの名前と点数をVisual Studioの出力ウィンドウへ表示した画面
Debug.WriteLineで名前と点数をVisual Studioの[出力]ウィンドウへ表示した例

デバッグ実行すると、[出力]ウィンドウに次のように表示されます。

スコア: 山田 の点数は 80 点です。
Console.WriteLine、Debug.WriteLine、MessageBox.Showの表示先を比較した図
Console.WriteLine・Debug.WriteLine・MessageBox.Showは、それぞれ表示される場所と用途が異なります。
  • 利用者の画面に表示する:MessageBox.Show
  • Visual Studioの[出力]で確認する:Debug.WriteLine
  • コンソールアプリの画面に表示する:Console.WriteLine

Debug.WriteLineは、利用者に見せる正式な画面表示ではなく、開発者がプログラムの状態を調べるための機能です。主にデバッグ実行中の確認に使い、本番アプリの表示にはラベルやメッセージボックスなどを使いましょう。

対応バージョン:Visual Studioの特定バージョンに依存しません
Console.WriteLineDebug.WriteLineMessageBox.ShowはVisual Studioのコード生成機能ではなく、.NETのAPIです。利用できるかどうかは主に対象の.NET/.NET Frameworkとアプリの種類で決まり、Visual Studioの画面配置はバージョンによって異なります。

注意
クイックアクションはコードの形を作る機能です。生成された名前、アクセス修飾子、配置場所、処理内容が目的に合っているかは、最後に必ず確認しましょう。

授業で確認したいポイント

  1. new Student("山田", 80)と書くと、どのようなコンストラクターが必要になりますか。
  2. student.ShowScore()はメソッドの「呼び出し」と「定義」のどちらですか。
  3. 赤い波線は、必ずスペルミスを意味しますか。
  4. Visual Studioが生成したコードのうち、自分で処理内容を書く必要がある部分はどこですか。

それぞれの「解答を見る」をクリックすると、解答と考え方を確認できます。

解答1を見る:必要なコンストラクター

string型の名前とint型の点数を受け取る、public Student(string name, int score)というコンストラクターが必要です。呼び出し側のnew Student("山田", 80)にある引数の型と並び順が、コンストラクターの形を決めます。

解答2を見る:student.ShowScore()の役割

student.ShowScore()はメソッドの呼び出しです。実際の定義は、Studentクラス内にあるpublic void ShowScore()の部分です。

解答3を見る:赤い波線の意味

いいえ。赤い波線はスペルミスだけを意味するものではありません。今回のように、使おうとしているクラスやメソッドがまだ定義されていない場合にも表示されます。まずエラーの説明を読み、「入力が間違っているのか」「必要な部品がまだないのか」を確認しましょう。

解答4を見る:自分で処理を書く部分

自分で処理内容を書く必要があるのは、生成されたShowScoreメソッドの波かっこの中です。たとえば、MessageBox.Show($"{Name}さんの点数は{Score}点です。");を追加します。自動生成された名前や配置場所が目的に合っているかも、あわせて確認します。

まとめ

Visual Studioの赤い波線は、単に「失敗」を示すものではありません。現在のコードに足りないものを教え、クイックアクションで必要なコードを生成する入口にもなります。

今回の流れは、使いたいコードを書く → エラー内容を確認する → 不足しているクラスやメソッドを生成する、です。完成コードを最初から上から順番に写すだけでなく、「使う側」から必要な部品を作っていくことで、クラス・コンストラクター・プロパティ・メソッドのつながりも見えやすくなります。

訪問数 8 回, 今日の訪問数 8回

広告