C# 6:getter/setter 中的 nameof() 当前 属性
C# 6: nameof() current property in getter/setter
有没有办法在getter/setter中获取当前属性的名字?
像这样:
public string MyProperty
{
get { return base.Get<string>(nameof(ThisProperty)); }
set { base.Set<string>(nameof(ThisProperty), value); }
}
nameof(ThisProperty)
应该解析为 "MyProperty".
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")
}
替代方法是 MethodBase,因为 Get 和 Set 本质上是方法。
public string MyProperty
{
get
{
return MethodBase.GetCurrentMethod().Name.Substring(4);
}
}
子串在那里是因为每个名称都以get_和set_为前缀
这个 returns MyProperty 作为结果。
有没有办法在getter/setter中获取当前属性的名字?
像这样:
public string MyProperty
{
get { return base.Get<string>(nameof(ThisProperty)); }
set { base.Set<string>(nameof(ThisProperty), value); }
}
nameof(ThisProperty)
应该解析为 "MyProperty".
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")
}
替代方法是 MethodBase,因为 Get 和 Set 本质上是方法。
public string MyProperty
{
get
{
return MethodBase.GetCurrentMethod().Name.Substring(4);
}
}
子串在那里是因为每个名称都以get_和set_为前缀
这个 returns MyProperty 作为结果。