0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Enumコンソールアプリ

0
Posted at

enum型とは

  • enum(列挙型)は「意味を持つ整数ラベル」
  • デフォルトでは整数値の型はint
  • つまり0, 1, 2, 3のような数値それぞれに何かしらの名前を付けたもの
    例:
ex.cs
enum OrderStatus
{
    Pending,
    Processing,
    Completed,
    Cancelled
}
名前(列挙子) 値(基になる数値)
Pending 0
Processing 1
Completed 2
Cancelled 3
  • OrderStatus.Completed:enum型の値
  • 2:Completedに対応する値(int)
  • Completed:列挙子(数値についた名前)
  • 列挙子の整数値を取得するには→ enum型の値を取得 → (int)キャスト
  • 整数値 → 列挙子→:enum型にキャスト
ex.cs
//enumを出力→列挙子表示
Console.WriteLine(OrderStatus.Pending);//Pending

//enum→数値に変換
int num = (int)OrderStatus.Pending;
Console.WriteLine(num);//0

//数値を対応するenum型の値に変換
//enum型の値を出力→列挙子表示
OrderStatus attr = (OrderStatus)1;//attr=OrderStatus.Processing
Console.WriteLine(attr);//Processing

enumはコンパイル時定数

Ex.cs
if(status == OrderStatus.Completed)
//コンパイル時にはenum型の値は数値として扱われるので実質以下
if(status == 2)

任意の整数値を与える

Ex.cs
enum Animal{mouse,cat,bird,dog=100,koala,pig=200,lion}
//0,1,2,100,101,200,201

int型以外で宣言

int型以外の整数型を基本に列挙型を作りたいときはコロンで指定

Ex.cs
enum Animal:bite{mouse,cat,bird,dog=100,koala,pig=200,lion}

使用例

注文状態の管理

Ex.cs
OrderStatus status = OrderStatus.Pending;
if (status == OrderStatus.Completed)
{
    Console.WriteLine("完了済み");
}

Enumのメソッド

Enum.GetValues

  • 列挙体に定義されている全ての値を取得する
  • 戻り値は列挙子が要素の配列
ex.cs
enum Status
{
    None = 0,
    Active = 1,
    Inactive = 2
}

foreach (Status s in Enum.GetValues(typeof(Status)))
{
    Console.WriteLine(s);
}
None
Active
Inactive

Enum.IsDefined

  • 指定した値が列挙体に存在するかチェックする
  • 戻り値はbool
ex.cs
enum Status
{
    None = 0,
    Active = 1,
    Inactive = 2
}

bool exists1 = Enum.IsDefined(typeof(Status), 1);       // true
bool exists2 = Enum.IsDefined(typeof(Status), 3);       // false
bool exists3 = Enum.IsDefined(typeof(Status), "Active"); // true

Console.WriteLine(exists1);
Console.WriteLine(exists2);
Console.WriteLine(exists3);
True
False
True

簡単なコンソールアプリを作ってみる

コンソールアプリ→MVC構成はいらないのでProgram.csだけあればいい

Program.cs

  • enumを定義してMain()で使ってConsoleに出力する
  • C#プログラムは必ずMain()から始まる
① Program起動
↓
② Main()実行
↓
③ enum定義参照
↓
④ Console出力
↓
⑤ 終了

AnimalをMainから直接参照できてるのはAnimalとProgramが同じnamespaceに属するから
(後述)

ex.cs
using System;
enum Animal
{
    mouse,
    cat,
    bird,
    dog = 100,
    koala,
    pig = 200,
    lion
}
class Program
{
    static void Main()
    {
        Animal a = Animal.dog;//aはdogというenum値を保持
        Console.WriteLine(Animal.cat);//cat
        Console.WriteLine((int)Animal.dog);//100
        Console.WriteLine((int)Animal.lion);//201
        Console.WriteLine(a);//Animal.dogを表示=dog
    }
}
  • C#はenumを文字列化して表示
    →つまり、Animal.catは内部的にはcat.ToString()が呼ばれている
  • (int)Animal.dogはenum → int に明示変換=整数値を表示

スコープ

メソッド内変数

メソッドの中でのみ使える。外からは見えない

クラス内変数(フィールド)

  • デフォルトではprivate=クラス内部のみ
  • アクセス修飾子をpublicにしたら他クラスから参照可能

同じ namespace にいる型

ex.cs
namespace A
{
    class X {}
}

namespace A
{
    class Y {}
}
  • このときYにusing Aを記述→YからXを使えるようになる
  • ただし、enumは例外:enumが
    • 同じnamespace内にあるならusingがなくてもenumを使える
      (今回はこれだった)
    • 別 namespaceならusingが必要

対話型コンソールアプリにした場合

ex.cs
using System;

enum Animal
{
    mouse,
    cat,
    bird,
    dog = 100,
    koala,
    pig = 200,
    lion
}

class Program
{
    static void Main()
    {
        Console.WriteLine("動物を入力してください");
        Console.WriteLine("mouse, cat, bird, dog, koala, pig, lion");

        string input = Console.ReadLine();

        // enum変換(超重要)
        if (Enum.TryParse(input, out Animal animal))
        {
            Console.WriteLine("入力成功");

            Console.WriteLine("選択された動物:");
            Console.WriteLine(animal);

            Console.WriteLine("内部値:");
            Console.WriteLine((int)animal);
        }
        else
        {
            Console.WriteLine("無効な入力です");
        }
    }
}

コンソール

動物を入力してください
mouse, cat, bird, dog, koala, pig, lion
pig
入力成功
選択された動物:
pig
内部値:
200
  • Console.ReadLine()は、C#などのコンソールアプリケーションで、
    ユーザーがキーボードから入力した1行分の文字列を読み込むメソッド
  • Enum.TryParseは、文字列(または数値)を安全にC#の列挙型(enum)に変換するメソッド
    • 変換に失敗しても例外(エラー)を発生させず、成功したかどうかのbool値を返す
    • 成功時のみoutパラメータで値を取得できるため、設定値の読み込みなど、不正な文字列が入力される可能性のある場面で推奨される
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?