nameof 式 (C# リファレンス)nameof expression (C# reference)

nameof 式を使うと、変数、型、またはメンバーの名前が文字列定数として生成されます。A nameof expression produces the name of a variable, type, or member as the string constant:

Console.WriteLine(nameof(System.Collections.Generic));  // output: Generic
Console.WriteLine(nameof(List<int>));  // output: List
Console.WriteLine(nameof(List<int>.Count));  // output: Count
Console.WriteLine(nameof(List<int>.Add));  // output: Add

var numbers = new List<int> { 1, 2, 3 };
Console.WriteLine(nameof(numbers));  // output: numbers
Console.WriteLine(nameof(numbers.Count));  // output: Count
Console.WriteLine(nameof(numbers.Add));  // output: Add

前の例で示されているように、型と名前空間の場合、生成される名前は通常完全修飾ではありません。As the preceding example shows, in the case of a type and a namespace, the produced name is usually not fully qualified.

逐語的識別子の場合、次の例に示すように、@ 文字は名前の一部ではありません。In the case of verbatim identifiers, the @ character is not the part of a name, as the following example shows:

var @new = 5;
Console.WriteLine(nameof(@new));  // output: new

nameof 式はコンパイル時に評価され、実行時には影響を与えません。A nameof expression is evaluated at compile time and has no effect at run time.

nameof 式を使って、引数をチェックするコードの保守性を高めることができます。You can use a nameof expression to make the argument-checking code more maintainable:

public string Name
{
    get => name;
    set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}

nameof 式は C# 6 以降で使用できます。A nameof expression is available in C# 6 and later.

C# 言語仕様C# language specification

詳細については、C# 言語仕様の「Nameof 式」セクションをご覧ください。For more information, see the Nameof expressions section of the C# language specification.

関連項目See also