C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のnameofキーワードとは?使い方とサンプルコードを解説

nameof演算子は、変数、型、メンバーなどの要素名を文字列リテラルとして返すC#の機能です。要素名を直接文字列としてハードコーディングせずに済むため、リファクタリング時にも安全にコードを維持できるのが大きな特徴です。

例えば、次のような変数があったとします。

var vehicle = "motorbike";

この変数の名前を文字列として取得するには、nameofを次のように使用します。

nameof(vehicle);

以下は、nameofキーワードを使用したサンプルコードです。

サンプルコード

using System;

public class Program {
    static void Main() {
        var vehicle = "motorbike";
        Console.WriteLine(nameof(vehicle));

        var time = DateTime.Now.ToLocalTime();
        Console.WriteLine(nameof(time));

        var a = false;
        Console.WriteLine(nameof(a));
    }
}

実行結果

vehicle
time
a

このように、nameofに渡した識別子の名前がそのまま文字列として出力されます。

nameofの主な活用シーン

nameofはシンプルな機能ですが、実務では以下のような場面で特に役立ちます。

1. 引数のnullチェック

public void Process(string data) {
    if (data == null)
        throw new ArgumentNullException(nameof(data));
}

例外メッセージに含める引数名をnameofで指定すれば、後から引数名を変更しても自動的に追従します。

2. リファクタリングへの強さ

変数名やプロパティ名を文字列リテラルで直接記述した場合、名前を変更してもコンパイラは検知できません。しかしnameofを使えば、IDEのリファクタリング機能によって自動的に更新されるため、文字列の修正漏れによるバグを防げます。

3. ログやイベント処理での利用

ASP.NET MVCのモデルバインディングや、INotifyPropertyChangedインターフェースの実装など、プロパティ名を文字列として扱う必要がある場面でもnameofは有効です。

まとめ

nameofは、識別子の名前を型安全に文字列として取得できる便利な演算子です。マジックストリング(ハードコーディングされた文字列)を排除し、保守性の高いコードを書くために、積極的に活用しましょう。

  1. JavaScriptのyield*式とは?ジェネレーターの委譲方法をサンプルコードで解説

    yield* 式は、別のジェネレーター関数やイテラブル(反復可能)オブジェクトを参照し、その値の生成処理を委譲するために使用される構文です。 通常の yield が単一の値を返すのに対し、yield* は指定したジェネレーターや配列などのイテラブルが持つすべての値を、あたかもその場所に直接記述したかのように順番に取り出します。これにより、複数のジェネレーターを連結したり、再帰的なデータ構造を簡潔に走査したりすることが可能になります。 yield*式の基本的な仕組み yield* の後にジェネレーターオブジェクトやイテラブルを指定すると、その要素がすべて順に生成されます。委譲先のジェネレーター

  2. Rubyのエイリアス(別名定義)完全ガイド:aliasキーワードとalias_methodの違い

    Rubyでは、既存のメソッドに別名(エイリアス)を付ける方法が2つあります。 alias(キーワード) alias_method(メソッド) どちらも同じ目的で使えますが、挙動が微妙に異なるため、初心者にとって混乱しやすいトピックです。 本記事では、両者の違いを詳しく掘り下げ、しっかりと理解できるように解説していきます。 aliasキーワードとは まずはaliasから見ていきましょう。aliasはRubyのキーワードの一つです(ifやdef、classなどと同じ扱いです)。 基本的な書き方は以下の通りです。 alias print_something puts print_someth