26

所以 .NET 4.5 引入了 .NET 4.5 CallerMemberNameAttribute,这对于任何使用 WPF 并实现的人来说似乎都是天赐之INotifyPropertyChanged物——我的问题是:该属性是4.5 5.0 编译器本质上绑定/支持的,还是它更像是环境的语法糖助手,就像一个人可以通过声明ExtensionAttribute自己的、神奇地打开 LINQ 语法来伪造 Visual Studio?

编辑:(对不起,乔恩!)我想我是在问是否可以CallerMemberNameAttribute通过在适当的命名空间中重新声明属性来“启用”.NET 4.0 中的功能,就像可以在.NET 中“启用”LINQ 查询语法一样2.0 通过正确声明ExtensionAttribute类。我强烈的怀疑是没有,自然……

换句话说:我想知道我是否可以CallerMemberName从不升级到 .NET 4.5/5的功能中受益

希望这更清楚...

NinjaEdit #2:叹息...版本编号约定令人困惑!

4

1 回答 1

51

是的,正如您所说,您可以使用 LINQ 和 .NET 2。我在带有 VS2012 编译器的 .NET 4.0 项目中成功使用了以下内容:

namespace System.Runtime.CompilerServices {

    [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
    public sealed class CallerMemberNameAttribute : Attribute {
    }

}

非常小心,项目中的每个人都在使用 VS2012,否则他们会得到无声的错误,因为CallerMemberNameAttribute没有做任何事情并且null作为参数默认值传递。

编辑 2013-06-28:考虑安装为 .NET 4 和 Silverlight提供(以及 .NET 4.5 中的一些其他类)的Microsoft.BclCallerMemberNameAttribute NuGet 包,而不是手动安装。

于 2012-11-14T15:51:46.460 回答