ArgumentExceptionVe türevleri için gerçekten yararlıdır :
public string DoSomething(string input)
{
if(input == null)
{
throw new ArgumentNullException(nameof(input));
}
...
Şimdi birisi inputparametrenin adını yeniden düzenlerse istisna da güncel tutulur.
Özelliklerin veya parametrelerin adlarını almak için daha önce yansımanın kullanılması gereken bazı yerlerde de yararlıdır.
Örnekte nameof(T)tipi parametresinin adını alır - bu çok yararlı olabilir:
throw new ArgumentException(nameof(T), $"Type {typeof(T)} does not support this method.");
Diğer bir kullanımı da nameofnumaralandırmalar içindir - genellikle kullandığınız bir numaralandırmanın dize adını istiyorsanız .ToString():
enum MyEnum { ... FooBar = 7 ... }
Console.WriteLine(MyEnum.FooBar.ToString());
> "FooBar"
.Net enum değerini (yani 7) tutar ve adı çalışma zamanında bulur.
Bunun yerine kullanın nameof:
Console.WriteLine(nameof(MyEnum.FooBar))
> "FooBar"
.Net derleme zamanında enum adını bir dizeyle değiştirir.
Yine başka bir kullanım INotifyPropertyChangedve günlüğe kaydetme için kullanılır - her iki durumda da, aradığınız üyenin adının başka bir yönteme geçirilmesini istersiniz:
// Property with notify of change
public int Foo
{
get { return this.foo; }
set
{
this.foo = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.Foo));
}
}
Veya...
// Write a log, audit or trace for the method called
void DoSomething(... params ...)
{
Log(nameof(DoSomething), "Message....");
}