所以.NET 4.5引入了CallerMemberNameAttribute
,对于任何使用WPF并实现INotifyPropertyChanged
的人来说这似乎是天赐之物 - 我的问题是:该属性是否与内在联系/支持4.5 5.0编译器,或者它更像是环境下的语法糖帮助器,就像人们可以通过声明自己的ExtensionAttribute
来伪造Visual Studio,神奇地启用LINQ语法?
编辑:(对不起乔恩!)
我想我是否可以通过在适当的命名空间中重新声明属性来“启用”.NET 4.0中CallerMemberNameAttribute
的功能,就像可以在.NET 2.0中“启用”LINQ查询语法一样适当声明ExtensionAttribute
类。我的强烈怀疑是不,自然......
换一种方式:我想知道如果不升级到.NET 4.5 / 5,我是否可以从CallerMemberName
的功能中受益
希望这更清楚......
NinjaEdit#2:叹息......版本编号惯例令人困惑!
答案 0 :(得分:50)
是的,就像你说的那样,你可以使用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:考虑安装Microsoft.Bcl NuGet包,它为.NET 4和Silverlight提供CallerMemberNameAttribute
(以及.NET 4.5中的一些其他类)而不是手动完成。