C#6:nameof()getter / setter中的当前属性

时间:2016-03-31 15:39:48

标签: c# c#-6.0 nameof

有没有办法在getter / setter中获取当前属性的名称?

这样的事情:

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

nameof(ThisProperty)应该解析为&#34; MyProperty&#34;。

2 个答案:

答案 0 :(得分:22)

不能用nameof完成,但有更好的方法(自C#5以来可用)。您可以将propertyName参数设为可选,并将CallerMemberName属性应用于该参数:

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

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

现在,如果省略propertyName的参数,则隐式传递当前成员名称:

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")
}

答案 1 :(得分:-3)

替代方法是MethodBase,因为Get和Set本质上是方法。

public string MyProperty
{
    get
    {
        return MethodBase.GetCurrentMethod().Name.Substring(4);
    }            
}

子字符串存在,因为每个名称都以get_和set _

为前缀

这会返回MyProperty作为结果。