首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 4.0中的CallerMemberName不工作

.NET 4.0中的CallerMemberName不工作
EN

Stack Overflow用户
提问于 2013-09-17 11:37:57
回答 3查看 26.4K关注 0票数 23

我正在尝试通过BCL可移植包使用.NET 4.0中的CallerMemberName属性。它总是返回空字符串,而不是成员名称。我做错了什么?

代码语言:javascript
复制
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;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-10 06:53:46

我找到了解决方案,尽管它对我来说没有用。您需要在.NET Framework4上安装KB2468871才能使用呼叫者信息属性。不幸的是,我不能要求每个开发人员在设置开发环境时都记得安装它。

票数 16
EN

Stack Overflow用户

发布于 2016-08-11 20:22:59

如果你添加以下内容,目标4.0就能正常工作:

代码语言:javascript
复制
namespace System.Runtime.CompilerServices {
    sealed class CallerMemberNameAttribute : Attribute { }
}
票数 32
EN

Stack Overflow用户

发布于 2014-01-18 10:09:27

据我所知,.Net 4.5支持CallerMemberName你不应该在.Net 4.0中使用它

有人使用StackTrace在.Net 4.0中实现了这一点。例如:http://www.journeyintocode.com/2013/04/callermembername-net-40.html

但是,我不建议您使用StackTrace,因为这可能会影响性能。使用StackTrace来获取调用者的姓名非常非常慢。这在Debug中有效,在release中你不能确定StackTrace是否“正确”。

因此,我的建议是:在.Net 4.5或更高版本中使用CallerMemberName。在.Net的早期版本中,没有任何万无一失或快速的方法来做到这一点。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18840924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档