繁体   English   中英

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

[英]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_为前缀

这将返回MyProperty作为结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM