ArgumentException
그리고 그 파생물에 정말 유용합니다 .
public string DoSomething(string input)
{
if(input == null)
{
throw new ArgumentNullException(nameof(input));
}
...
이제 누군가 input
매개 변수 이름을 리팩터링하면 예외도 최신 상태로 유지됩니다.
또한 속성이나 매개 변수의 이름을 얻기 위해 이전에 리플렉션을 사용해야했던 곳에서도 유용합니다.
귀하의 예 nameof(T)
에서 type 매개 변수의 이름을 가져옵니다.이 또한 유용 할 수 있습니다.
throw new ArgumentException(nameof(T), $"Type {typeof(T)} does not support this method.");
또 다른 용도 nameof
는 열거 형입니다-일반적으로 사용하는 열거 형의 문자열 이름을 원할 경우 .ToString()
:
enum MyEnum { ... FooBar = 7 ... }
Console.WriteLine(MyEnum.FooBar.ToString());
> "FooBar"
.Net이 열거 형 값 (예 :)을 보유하고 7
런타임에 이름을 찾을 때 실제로는 상대적으로 느립니다 .
대신 다음을 사용하십시오 nameof
.
Console.WriteLine(nameof(MyEnum.FooBar))
> "FooBar"
이제 .Net은 컴파일시 열거 이름을 문자열로 바꿉니다.
또 다른 용도는 INotifyPropertyChanged
로깅 및 로깅에 사용됩니다. 두 경우 모두 호출하려는 멤버의 이름을 다른 메소드로 전달하려고합니다.
// Property with notify of change
public int Foo
{
get { return this.foo; }
set
{
this.foo = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.Foo));
}
}
또는...
// Write a log, audit or trace for the method called
void DoSomething(... params ...)
{
Log(nameof(DoSomething), "Message....");
}