你如何在LINQPad中使用CallerMemberName?

时间:2012-10-31 15:18:22

标签: c# linqpad c#-5.0

所以LINQPad说它支持C#5.0中的所有内容,但我无法使CallerMemberName工作。

void Main()
{
    GetMethodName().Dump();
}

public string GetMethodName([CallerMemberName] string memberName = "")
{
    return memberName;
}

错误:类型或命名空间名称' CallerMemberName'找不到(按F4添加using指令或汇编引用)

类型或命名空间名称' CallerMemberNameAttribute'找不到(你错过了使用指令或汇编引用吗?)

我尝试为CallerMemberName所在的命名空间添加using行,但当然这并不起作用,因为LINQPad假定您输入的代码位于某个秘密隐藏类中,您可以&#39 ; t将using放在一个类中。所以我尝试输入CallerMemberName的完整命名空间:public string GetMethodName([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")但这仍然无效。

错误:类型或命名空间名称' CallerMemberName'名称空间&System; Run.Runtime.CompilerServices'

中不存在

类型或命名空间名称' CallerMemberNameAttribute'名称空间&System; Run.Runtime.CompilerServices'

中不存在

2 个答案:

答案 0 :(得分:2)

首先,错误消息清楚地表明要添加using,您需要按F4并将其添加到显示的对话框中。

但是你的第二个版本应该可行,它对我来说效果很好。也许它不适合你,因为你实际上并没有安装C#5.0编译器。你安装了.Net 4.5(包括更新的编译器)吗?

答案 1 :(得分:0)

如果我将System.Runtime.CompilerServices添加到LINQPad中的using指令中,这对我有用:

public void Method1(object someArgument, object someOtherArgument,
             [CallerMemberName] string callerMemberName = null,
             [CallerFilePath] string callerFilePath = null,
             [CallerLineNumber] int callerLineNumber = 0)
{
    string.Format("Called with {0}, {1} from method {2} in file {3} at line number {4}",
            someArgument, someOtherArgument, 
            callerMemberName, callerFilePath, callerLineNumber)
        .Dump();
}

确保您使用的是当前版本的LINQPad。在过去,有一个单独的.NET版本< 4。