2012-10-31 56 views
1

所以LINQPad表示它支持C#5.0中的所有內容,但我無法使CallerMemberName正常工作。如何在LINQPad中使用CallerMemberName?

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

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

錯誤:類型或命名空間名稱CallerMemberName'找不到(按F4添加using指令或組件參考)

類型或命名空間名稱「CallerMemberNameAttribute」找不到(您是否缺少using指令或程序集引用?)

我試着爲CallerMemberName所在的名稱空間添加一條using行,但當然這不起作用,因爲LINQPad會假設您輸入的代碼位於某個祕密隱藏課程,你不能把using裏面的一個clas秒。然後我嘗試輸入CallerMemberName的完整名稱空間:public string GetMethodName([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")但這仍然不起作用。

錯誤:類型或命名空間名稱CallerMemberName'不存在命名空間「System.Runtime.CompilerServices」

類型或命名空間名稱「CallerMemberNameAttribute」存在的命名空間「System.Runtime不存在。編譯器服務'

回答

2

首先,錯誤消息明確指出要添加一個using,您需要按F4並將其添加到顯示的對話框中。

但是你的第二個版本應該可以工作,它對我來說工作得很好。也許它不適合你,因爲你實際上沒有安裝C#5.0編譯器。你有.Net 4.5(包括更新的編譯器)安裝嗎?

+0

當然我知道。我一直在Visual Studio中使用CallerMemberName。我只是試圖在LINQPad中做到這一點,以便讓工作中的某個人瞭解它是如何工作的一個快速示例,除非我無法實現它。 – Nick

0

這個工作對我來說,如果我在LINQPad添加System.Runtime.CompilerServices我使用指令:

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.