.NET TIPS

列挙体の値を列挙するには?

デジタルアドバンテージ
2003/04/04

 列挙体(列挙型)は一定の数の定数(定数のグループ)を定義するためのものだ。例えば、.NET Frameworkのクラス・ライブラリには、週の7つの曜日を定義したDayOfWeek列挙体(System名前空間)が用意されている。

 列挙体で定義されたそれぞれの定数の値を取得するには、Enumクラス(System名前空間)のGetValuesメソッドを使用する。このメソッドはstaticなメソッドであるため、インスタンスを作成しなくても、次のようにして呼び出すことができる。

Array arr = Enum.GetValues(typeof(DayOfWeek));

 Enum.GetValuesメソッドは、列挙体で定義されたすべての定数を含んだArrayクラスのオブジェクトを返す。パラメータには対象となる列挙体の型を表すTypeクラスのオブジェクトを指定する。typeofはTypeオブジェクトを取得するためのC#の演算子だ(Visual Basic .NETではGetType式を使用する)。

 上記のコードは、あらかじめ次のように型付きの配列にキャストしておいた方が、各要素を扱いやすいかもしれない。

DayOfWeek[] dow = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));

 次のサンプル・プログラムは、DayOfWeek列挙体に含まれている定数の値(列挙体の定数はデフォルトではint型)と、その名前を列挙する。

// enumvalues.cs

using System;

class EnumValues {
  public static void Main() {

    foreach (DayOfWeek dow in Enum.GetValues(typeof(DayOfWeek))) {
      Console.WriteLine((int)dow + ", " + dow.ToString());
    }
    // 出力:
    // 0, Sunday
    // 1, Monday
    // 2, Tuesday
    // 3, Wednesday
    // 4, Thursday
    // 5, Friday
    // 6, Saturday

  }
}
// コンパイル方法:csc enumvalues.cs
DayOfWeek列挙体の値を列挙するC#のサンプル・プログラム(enumvalues.cs)

レンダリング・モードの列挙

 .NET Frameworkのクラス・ライブラリでは、Windowsアプリケーションでテキストを描画する場合の品質を定義したTextRenderingHint列挙体(System.Drawing.Text名前空間)が用意されている。次に、Enum.GetValuesメソッドでこの列挙体の値を列挙し、各品質でテキストを描画するプログラムを作成してみよう。

 まずVisual Studio .NETを起動し、新しいプロジェクトとしてC#のWindowsアプリケーションを開く。これにより次のようなフォームが作成される。

Visual Studio .NETで作成されるフォーム

 次にコードを表示し、次のコードを追加する。

protected override void OnPaint(PaintEventArgs e)
{
  Graphics g = e.Graphics;

  Font font = new Font(
    new FontFamily("Times New Roman"),
    32,
    FontStyle.Bold,
    GraphicsUnit.Pixel);

  int y = 0;
  foreach (TextRenderingHint trh
        in Enum.GetValues(typeof(TextRenderingHint))) {
    g.TextRenderingHint = trh;
    g.DrawString(trh.ToString(), font,
        SystemBrushes.WindowText, new PointF(0, y));
    y += 40;
  }
}
コードを開いて追加するOnPaintメソッド
このOnPaintメソッドは描画が必要な場合に呼び出される。ここではまずFontオブジェクトを作成し、テキストのレンダリング・モードを設定してから、作成したFontオブジェクトで文字列を描画する。なお、プログラムの先頭には「using System.Drawing.Text;」を追加する必要がある。

 プログラムを実行すると次のような画面が表示される。

プログラムの実行結果
TextRenderingHint列挙体で定義された各品質で、その値の名前を描画している。

 Single〜の2つの行以外はアンチエイリアシングされているのが分かるだろうか。End of Article

カテゴリ:クラス・ライブラリ 処理対象:列挙体
使用ライブラリ:Enumクラス(System名前空間)
使用ライブラリ:DayOfWeek列挙体(System名前空間)
使用ライブラリ:TextRenderingHint列挙体(System.Drawing.Text名前空間)
使用キーワード:typeof演算子
関連TIPS:列挙体の名前を列挙するには?
 
この記事と関連性の高い別の.NET TIPS
列挙体の名前を列挙するには?
Windowsのシステム・フォルダのパスを取得するには?
整数や文字列を列挙体に変換するには?[C#/VB]
メッセージ・ボックスを表示するには?
列挙体の値を任意の文字列に変換するには?[C#/VB]
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間