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

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

像这样的东西:

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

(ThisProperty将返回“MyProperty”)。

谢谢!

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

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

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

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

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

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

子串是因为每个名称都以get_和set_为前缀

这将返回MyProperty作为结果。