如何在符合CLS的程序集中使用CallerMemberName

时间:2017-08-04 09:01:57

标签: c#-6.0 default-parameters cls-compliant

我已按照MSDN中所述的CallerMemberName类的INotifyPropertyChanged实现使用了 public event PropertyChangedEventHandler PropertyChanged; // This method is called by the Set accessor of each property. // The CallerMemberName attribute that is applied to the optional propertyName // parameter causes the property name of the caller to be substituted as an argument. private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } 属性,如下所示:

CallerMemberName

但是,使用默认参数不符合CLS。但是font[size=1]只能用于具有默认值的参数...是否有一种常用的方法来解决这种不一致问题,而不必使用硬编码的字符串参数调用notify方法?

1 个答案:

答案 0 :(得分:1)

我只是删除了CallerMemberName属性和默认参数值,这意味着参数不再是可选的,因此方法签名变为:

private void NotifyPropertyChanged(String propertyName)

然后用nameof运算符提供字符串参数来调用它是一个小的(足够的)更改:

NotifyPropertyChanged(nameof(FooProperty));

这看起来效果很好。

我会暂时搁置这个问题,但是其他人可能会有更好的方法,或者提出这个解决方案的问题。