所以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'
中不存在答案 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。