ArgumentException
Ve türevleri için gerçekten yararlıdır :
public string DoSomething(string input)
{
if(input == null)
{
throw new ArgumentNullException(nameof(input));
}
...
Şimdi birisi input
parametrenin 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 nameof
numaralandı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 INotifyPropertyChanged
ve 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....");
}