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

How to use CallerMemberName in a CLS compliant assembly

我在 class 的 INotifyPropertyChanged 实现中使用了 CallerMemberName 属性,如下所述 MSDN

    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));
        }
    }

但是,使用默认参数不符合 CLS。但是 CallerMemberName 只能与具有默认值的参数一起使用...有没有一种常用的方法可以解决这种不一致而不必使用硬编码字符串参数调用 notify 方法?

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

private void NotifyPropertyChanged(String propertyName)

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

NotifyPropertyChanged(nameof(FooProperty));

这似乎工作得很好。

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