Search code examples
c#c#-6.0nameof

C# 6: nameof() current property in getter/setter


Is there a way to get the name of the current property in a getter/setter?

Something like this:

public string MyProperty
{
    get { return base.Get<string>(nameof(ThisProperty)); }
    set { base.Set<string>(nameof(ThisProperty), value); }
}

nameof(ThisProperty) should resolve to "MyProperty".


Solution

  • It can't be done with nameof, but there's an even better way (available since C# 5). You can make the propertyName parameter optional and apply the CallerMemberName attribute to it:

    protected void Set<T>(T value, [CallerMemberName] string propertyName = null)
    {
        ...
    }
    
    protected T Get<T>([CallerMemberName] string propertyName = null)
    {
        ...
    }
    

    Now if you omit the argument for propertyName, the current member name is passed implicitly:

    public string MyProperty
    {
        get { return base.Get<string>(); } // same as calling Get<string>("MyProperty")
        set { base.Set<string>(value); } // same as calling Set<string>(value, "MyProperty")
    }