【C#】nameofとtypeofの使い方

nameofとは

「nameof」を用いると、変数・型・メンバーの名前が文字列定数として生成されます

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/nameof

 

サンプルコード

using System;

namespace c_nameof
{
    class Program
    {
        static void Main(string[] args)
        {
            var num = 100;

            Console.WriteLine($"変数名は{nameof(num)}です");
        }
    }
}

実行結果:

変数名はnumです

「nameof」は、コンパイル時に評価されるため実行時には影響を与えません。

 

typeofとは

「typeof」を用いると、インスタンスを作成したクラスが何かを判別できます(型のSystem.Typeインスタンスが取得できます)。

■公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/type-testing-and-cast#typeof-operator

 

サンプルコード

using System;

namespace Sample
{
    enum CarMaker
    {
        TOYOTA,
        NISSAN,
        DAIHATSU,
        MATSUDA,
        HONDA
    }

    enum FoodMaker
    {
        明治,
        味の素,
        日清食品,
        キッコーマン,
    }

    class Sample
    {
        static void Main()
        {
          // GetNamesメソッドを使ってenumの名前(CarMaker)の配列を返す
            foreach (string car in Enum.GetNames(typeof(CarMaker))) // typeofで型を判別
            {
                Console.WriteLine(car);
            }

            Console.WriteLine("------------");

          // GetNamesメソッドを使ってenumの名前(FoodMaker)の配列を返す
            foreach (string food in Enum.GetNames(typeof(FoodMaker))) // typeofで型を判別
            {
                Console.WriteLine(food);
            }

             Console.ReadKey();
        }
    }
}

実行結果:

TOYOTA
NISSAN
DAIHATSU
MATSUDA
HONDA
------------
明治
味の素
日清食品
キッコーマン

「typeof」を用いることで、クラスや型を判別することができます。

typeofの他にも「is演算子」で判別することも可能です。

詳しくは、下記の記事を参考ください。
 

【C#】is演算子とas演算子とは

2021.05.11

実際の開発現場では、「typeof」の使用頻度が高いです。

また今回は、enumキーワードを用いて実装しました。

enumに関しては下記の記事を参考ください。

【C#】列挙型(enum)の使い方

2021.03.28

 

おすすめ・参考書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)

■C#をある程度学習した方向け
基礎からしっかり学ぶCの教科書 改訂新版 (マイクロソフト関連書)

独習C 新版

Effective C 6.0/7.0