День сто третий. #ЗаметкиНаПолях
Метод nameof
Метод
1. Валидация параметров:
Аргументом для
Так как аргумент должен быть синтаксическим выражением, существует несколько запрещенных элементов:
- предопределенные типы (например,
- обнуляемые типы (
- массивы (
- указатели (
- полные псевдонимы (
- несвязанные универсальные типы (Dictionary<,>),
- идентификаторы препроцессора (
- метки (
Сведения о сигнатурах, например "
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof
Метод nameof
Метод
nameof
используется для получения простого строкового имени переменной, типа или члена типа. Например:string text;Примеры Использования
WriteLine(nameof(text)); // "text"
WriteLine(nameof(person.Address.ZipCode)); // "ZipCode"
1. Валидация параметров:
void f(string s) {2. Ссылки ActionLink в MVC:
if (s == null) throw new ArgumentNullException(nameof(s));
}
<%= Html.ActionLink("Sign up",3. Реализация INotifyPropertyChanged:
@typeof(UserController),
@nameof(UserController.SignUp))
%>
int p {4. DependencyProperty в XAML:
get { return this.p; }
set { this.p = value; PropertyChanged(this, new PropertyChangedEventArgs(nameof(p)); }
}
public static DependencyProperty AgeProperty = DependencyProperty.Register(nameof(Age), typeof(int), typeof(C));5. Запись в журнал:
void f(int i) {6. Атрибуты:
Log(nameof(f), "method entry");
}
[DebuggerDisplay("={" + nameof(GetString) + "()}")]Примечания
class C {
string GetString() { }
}
Аргументом для
nameof
должно быть простое имя, полное имя, доступ к членам, базовый доступ с заданным членом или доступ к this
с указанным членом. Выражение аргумента идентифицирует определение кода, но никогда не вычисляется.Так как аргумент должен быть синтаксическим выражением, существует несколько запрещенных элементов:
- предопределенные типы (например,
int
или void
),- обнуляемые типы (
Point?
),- массивы (
Customer[,]
),- указатели (
Buffer*
),- полные псевдонимы (
A::B
)- несвязанные универсальные типы (Dictionary<,>),
- идентификаторы препроцессора (
DEBUG
),- метки (
loop:
).Сведения о сигнатурах, например "
Method1 (str, str)
", получить невозможно. Чтобы это сделать, можно использовать выражение (Expression e = () => A.B.Method1("s1", "s2"))
и извлечь MemberInfo
из результирующего дерева выражения.Источник: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof