Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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<>)); // 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
Powyższy przykład użycia List<> jest obsługiwany w języku C# 14 lub nowszym. 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");
}
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 rozszerzonego nameof zakresu .