Stringify成员名称类似于C中的#define str(s)#s

Nts*_*alt 0 .net c# inotifypropertychanged

有没有办法在C#for .NET 4.0中字符串化成员名称,就像在C中使用#define str(s) #s宏一样?

public Double MyDouble
{
    get { return _MyDouble;}
    set 
    { 
        _MyDouble = value; 
        RaisePropertyChanged("MyDouble");
        // The below item would refactor correctly if C# had a stringify pre-processor
        // RaisePropertyChanged(str(MyDouble));
    }
}
private Double _MyDouble;
Run Code Online (Sandbox Code Playgroud)

如果我已Search in Strings禁用或打破完全不相关的字符串(如果已启用),则重新分解会中断raise属性更改事件.有时我不会注意到UI元素不再响应更改.

vcs*_*nes 7

不,不幸的是.目前,您必须使用PostSharp或NotifyPropertyWeaver之类的东西来可靠地执行此操作.

请注意,在C#5中,您将能够执行此操作:

public void RaisePropertyChanged([CallerMemberName] string member = "")
{
}
Run Code Online (Sandbox Code Playgroud)

你会像这样使用它:

public Double MyDouble
{
    get { return _MyDouble;}
    set 
    { 
        _MyDouble = value; 
        RaisePropertyChanged();
    }
}
Run Code Online (Sandbox Code Playgroud)

C#5编译器会自动填写可选参数.