.NET 4.0中的CallerMemberName无法正常工作

时间:2013-09-17 03:37:57

标签: c# .net .net-4.0 base-class-library callermembername

我试图通过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;
    }
}

3 个答案:

答案 0 :(得分:26)

如果添加以下内容,定位4.0的工作正常:

myname@... MINGW64 ~/scipoptsuite-3.2.1/zimpl-3.3.3
$ make
-> generating library lib/libzimpl-3.3.3.mingw.x86_64.gnu.opt.a
-> linking bin/zimpl-3.3.3.mingw.x86_64.gnu.normal.opt
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible lib/libgmp.a when searching for -lgmp
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible lib\libgmp.a when searching for -lgmp
....
....
....
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmsvcrt
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:170: bin/zimpl-3.3.3.mingw.x86_64.gnu.normal.opt] Error 1

答案 1 :(得分:15)

我找到了解决方案,虽然它对我没用。您需要在.NET Framework 4之上安装KB2468871才能使用调用方信息属性。不幸的是,我不能要求每个开发人员在设置开发环境时都记得安装它。

答案 2 :(得分:8)

据我所知,。{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的早期版本中,没有任何万无一失或快速的方法。