はじめてのC#【 04_制御文 】

##    はじめに

  __<font color="blue">　【C#(シーシャープ)】</font>__ はMicrosoft社が開発した
　　　プログラミング言語で、C++やJavaに似た構文を持ち
　　　.NET Framework上で稼働するWindowsアプリの開発や
　　　Webアプリケーション開発のためのフレームワークである
　　　ASP.NETが使用可能なプログラム言語です。

##### このメモは、C#の基本的な記載方法のまとめです。

--------------------------------------------------------------

## 前回

https://qiita.com/nano357/items/136b287f09b857125f3d


------------------------------------------------

## <font color="green">列挙型の定義と使用</font>
#### 列挙型は整数値に意味のある名前を付けることができる



 ##### 基本的な構文
```C#
    // 曜日を表す列挙型を定義
    enum DayOfWeek
    {
        Sunday,    // 0 自動的に整数値が割り当てられます。
        Monday,    // 1
        Tuesday,   // 2
        Wednesday, // 3
        Thursday,  // 4
        Friday,    // 5
        Saturday   // 6
    }
````


 ##### 使用
```C#

    static void Main()
    {
        // 列挙型の値を変数（3に相当）に代入
        DayOfWeek today = DayOfWeek.Wednesday;

        // 結果を表示
        Console.WriteLine("Today is: " + today);


        // 列挙型の値を整数にキャスト
        int dayNumber = (int)today;

        // 結果を表示
        Console.WriteLine("Day number is: " + dayNumber);
    }


````

 #####  実行結果

````
Today is: Wednesday
Day number is: 3
````



------------------------------------------------

## <font color="green">列挙型とswitch文</font>
#### switch文を使って、ユーザーが入力した番号に対応する内容を表示 ※1


 ##### 列挙型の定義（番号を指定することもできる。Tigerは11になる）
```C#
    enum Animal
    {
        Dog = 1,        // 1
        Cat,            // 2
        Bird,           // 3
        Elephant = 10,  // 10
        Tiger,          // 11
        Lion            // 12

    }
````


 ##### 使用
```C#


    static void Main()
    {
        // ユーザーに番号の入力を促す
        Console.WriteLine("動物の番号を入力してください。");
        Console.WriteLine("1: 犬, 2: 猫, 3: 鳥, 10: 象, 11: 虎, 12: ライオン");
        
        // ユーザーの入力を取得し、整数に変換 ※2
        int num = int.Parse(Console.ReadLine());

        // 入力された番号に基づいて動物を決定
        Animal selectedAnimal;
        switch (num)
        {
            case 1:
                selectedAnimal = Animal.Dog;
                break;
            case 2:
                selectedAnimal = Animal.Cat;
                break;
            case 3:
                selectedAnimal = Animal.Bird;
                break;
            case 10:
                selectedAnimal = Animal.Elephant;
                break;
            case 11:
                selectedAnimal = Animal.Tiger;
                break;
            case 12:
                selectedAnimal = Animal.Lion;
                break;
            default:
                Console.WriteLine("無効な番号が入力されました。");
                return;
        }

        // 結果を日本語で表示
        string animalName = selectedAnimal switch
        {
            Animal.Dog => "犬",
            Animal.Cat => "猫",
            Animal.Bird => "鳥",
            Animal.Elephant => "象",
            Animal.Tiger => "虎",
            Animal.Lion => "ライオン",
            _ => "不明"
        };

        Console.WriteLine($"選択された動物は: {animalName} です。");
    }

````

 #####  実行結果（入力前）

````
動物の番号を入力してください。
1: 犬, 2: 猫, 3: 鳥, 10: 象, 11: 虎, 12: ライオン
````

 #####  実行結果（入力後）

````
12
選択された動物は: ライオン です。
````


 #####  switch式の動作

selectedAnimal switch:

ここではselectedAnimalという変数（Animal型の列挙型の値）がswitch式の条件となります。

たとえば Animal.Dog（列挙型の値）が
selectedAnimalと一致する場合、"犬"という文字列が
animalNameに設定されます。



_ => "不明":

_（アンダースコア）は、上記のどのケースにも一致しない場合に
使用されるデフォルトのケースを表します。

ここでは、どの動物にも一致しない場合に"不明"という文字列が設定されます。


------------------------------------------------

## <font color="green">IF,ループで列挙型のすべてのメンバーを表示する</font>
#### 列挙型に追加されたメンバーが増えても自動的に対応


 ##### byte型を基にした列挙型の使用例(foreach ※3)
```C#

using System;

class Program
{
    // 動物を表す列挙型を定義（基礎型をbyteに指定）
    enum Animal : byte
    {
        Dog = 1,        // 1
        Cat,            // 2
        Bird,           // 3
        Elephant = 10,  // 10
        Tiger,          // 11
        Lion,           // 12
        Human = 99      // 99
    }

    static void Main()
    {
        // Animal列挙型のすべてのメンバーを取得 ※4
        foreach (Animal animal in Enum.GetValues(typeof(Animal)))
        {
            // 各メンバーの番号と名前を表示
            Console.WriteLine($"{(byte)animal}: {animal}");
        }

        // ユーザーに番号の入力を促す
        Console.WriteLine("\n動物の番号を入力してください:");
        
        // ユーザーの入力を取得し、整数に変換 ※5
        byte num = byte.Parse(Console.ReadLine());

        // 入力された番号に基づいて動物を決定 ※6
        Animal selectedAnimal;
        if (Enum.IsDefined(typeof(Animal), num))
        {
            selectedAnimal = (Animal)num;
            Console.WriteLine("選択された動物は: " + selectedAnimal + " です。");
        }
        else
        {
            Console.WriteLine("無効な番号が入力されました。");
        }
    }
}
````

 #####  実行結果

````
1: Dog
2: Cat
3: Bird
10: Elephant
11: Tiger
12: Lion
99: Human

動物の番号を入力してください:
12
選択された動物は: Lion です。
````


 ##### ※1
 [条件分岐 - C# によるプログラミング入門](https://ufcpp.net/study/csharp/st_branch.html)

 ##### ※2
 [【C#入門】文字列と数値の相互変換総まとめ(ToString/Parse/Convert)](https://www.sejuku.net/blog/53682)

 ##### ※3
 [反復処理 - C# によるプログラミング入門](https://ufcpp.net/study/csharp/st_loop.html)

 ##### ※4
 [【C#入門】enumの値と名前をforeachで列挙する(GetValues/GetNames)](https://www.sejuku.net/blog/50504)

 ##### ※5
 [【C#入門】文字列と数値の相互変換総まとめ(ToString/Parse/Convert)](https://www.sejuku.net/blog/53682)

 ##### ※6
 [Enum.IsDefined メソッド (System)](https://learn.microsoft.com/ja-jp/dotnet/api/system.enum.isdefined?view=net-5.0)
 

--------------------------------------------------------------

## 次回

https://qiita.com/nano357/items/b790b4c0cfbabccb1764

--------------------------------------------------------------

## 参考文献

C#関連情報サイト様

https://www.sejuku.net/blog/category/programming-language/c-sharp?utm_source=blog&utm_medium=blog&utm_campaign=blog__50504

https://so-zou.jp/software/tech/programming/c-sharp/

https://programsuki.com/category/study/programming/clanguage/


--------------------------------------------------------------