[英]CallerMemberName Attribute not working with EventAggregator
[英]CallerMemberName in .NET 4.0 not working
我试图通过BCL可移植包在.NET 4.0中使用CallerMemberName
属性。 它总是返回一个空字符串而不是成员名称。 我究竟做错了什么?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MessageBox.Show(new class2().CallMe);
}
}
public class class2
{
public string CallMe
{
get
{
return HelpMe();
}
}
private string HelpMe([CallerMemberName] string param = "")
{
return param;
}
}
如果添加以下内容,定位4.0的工作正常:
namespace System.Runtime.CompilerServices {
sealed class CallerMemberNameAttribute : Attribute { }
}
我找到了解决方案,虽然它对我没用。 您需要在.NET Framework 4之上安装KB2468871才能使用调用方信息属性。 不幸的是,我不能要求每个开发人员在设置开发环境时都记得安装它。
据我所知,.Net 4.5支持CallerMemberName
你不应该在.Net 4.0中使用它
有人使用StackTrace在.Net 4.0中实现了这一点。 例如: http : //www.journeyintocode.com/2013/04/callermembername-net-40.html
但是,我不建议您使用StackTrace,因为可能会有性能损失。 使用StackTrace获取调用者名称非常慢。 这在Debug中有效,在发布时你无法确定StackTrace是否“正确”。
所以,我的建议是:只需在.Net 4.5或更高版本中使用CallerMemberName
。 在.Net的早期版本中,没有任何万无一失或快速的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.