1

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

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

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

错误:找不到类型或命名空间名称“CallerMemberName”(按 F4 添加 using 指令或程序集引用)

找不到类型或命名空间名称“CallerMemberNameAttribute”(您是否缺少 using 指令或程序集引用?)

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

错误:命名空间“System.Runtime.CompilerServices”中不存在类型或命名空间名称“CallerMemberName”

命名空间“System.Runtime.CompilerServices”中不存在类型或命名空间名称“CallerMemberNameAttribute”

4

2 回答 2

2

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

但是您的第二个版本应该可以工作,而且对我来说效果很好。也许它对您不起作用,因为您实际上没有安装 C# 5.0 编译器。您是否安装了 .Net 4.5(包括更新的编译器)?

于 2012-10-31T20:23:20.650 回答
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 有一个单独的版本。

于 2013-06-06T16:54:55.633 回答