Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wyrażenie nameof
tworzy nazwę zmiennej, typu lub elementu członkowskiego jako stałej ciągu. Wyrażenie nameof
jest oceniane w czasie kompilacji i nie ma żadnego efektu w czasie wykonywania. Gdy operand jest typem lub przestrzenią nazw, utworzona nazwa nie jest w pełni kwalifikowana. W poniższym przykładzie pokazano użycie nameof
wyrażenia:
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
List<int> 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
Możesz użyć nameof
wyrażenia, aby kod sprawdzania argumentów był bardziej konserwowalny:
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Name)} cannot be null");
}
Począwszy od języka C# 11, można użyć nameof
wyrażenia z parametrem metody wewnątrz atrybutu w metodzie lub jego parametrze. Poniższy kod pokazuje, jak to zrobić dla atrybutu w metodzie, funkcji lokalnej i parametru wyrażenia lambda:
[ParameterString(nameof(msg))]
public static void Method(string msg)
{
[ParameterString(nameof(T))]
void LocalFunction<T>(T param) { }
var lambdaExpression = ([ParameterString(nameof(aNumber))] int aNumber) => aNumber.ToString();
}
Wyrażenie nameof
z parametrem jest przydatne w przypadku używania atrybutów analizy dopuszczalnej wartości null lub atrybutu CallerArgumentExpression.
Gdy operand jest identyfikatorem dosłownym, @
znak nie jest częścią nazwy, jak pokazano w poniższym przykładzie:
var @new = 5;
Console.WriteLine(nameof(@new)); // output: new
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję Nameof expressions ( Wyrażenia nazw) specyfikacji języka C# oraz specyfikację funkcji C# 11 — Extended scope (Rozszerzony nameof
zakres ).