在属性的 Set{} 方法中获取属性名称



在C#4.0中,我正在执行以下操作:

public string PropertyA
{
  get;
  set
  {
    DoSomething("PropertyA");
  }
}
public string PropertyB
{
  get;
  set
  {
    DoSomething("PropertyB");
  }
}

我有很多这样的属性,手动操作会很痛苦。有没有一种方法可以用代替它

public string PropertyA
{
  get;
  set
  {
    DoSomething(GetNameOfProperty());
  }
}

也许是用反射?

在.NET 4.5中,DoSomething方法应该使用[CallerMemberName]参数属性:

void DoSomething([CallerMemberName] string memberName = "")
{
    // memberName will be PropertyB
}

然后这样称呼它:

public string PropertyA
{
     get
     {
         ...
     }
     set
     {
         DoSomething();
     }
}

请参阅MSDN。

在当前的C#版本中无法做到这一点,反射也无济于事。你可以用表达式破解这个问题,并进行编译时检查,但仅此而已,你还需要键入更多的代码

 DoSomething(()=>this.PropertyA); // have dosomething take an expression and parse that to find the member access expression, you'll get the name there

如果可能的话,一个很好的选择是使用Postsharp以一种干净的方式来做这件事,但这可能并不总是可能的。

您可以使用GetCurrentMethod的反射。

public string PropertyA
{
    get;
    set
    {
        DoSomething(MethodBase.GetCurrentMethod().Name.Substring(4));
    }
}

它可用于.Net 4。

正如@hvd所解释的,Name将返回set_PropertyA,然后使用Substring获取属性名称。

相关内容

  • 没有找到相关文章

最新更新