13

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

像这样的东西:

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

nameof(ThisProperty)应解析为“MyProperty”。

4

2 回答 2

25

它不能用 来完成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")
}
于 2016-03-31T15:45:47.113 回答
-3

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

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

子字符串在那里,因为每个名称都以 get_ 和 set_ 为前缀

这将返回 MyProperty 作为结果。

于 2016-03-31T15:49:07.767 回答