1

そのため、LINQPad は C# 5.0 のすべてをサポートしていると言っていますが、CallerMemberName を機能させることができません。

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

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

エラー: 型または名前空間の名前 'CallerMemberName' が見つかりませんでした (F4 キーを押して、using ディレクティブまたはアセンブリ参照を追加してください)

型または名前空間名 'CallerMemberNameAttribute' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

CallerMemberName が含まれている名前空間の行を追加しようとしましたusingが、LINQPad は入力したコードが秘密の非表示クラスの内部にあると想定し、クラスの内部に配置できないため、もちろん機能しませんusing。そこで、CallerMemberName: の完全な名前空間を入力しようとしましたpublic string GetMethodName([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")が、それでもうまくいきません。

エラー: 型または名前空間名 'CallerMemberName' が名前空間 'System.Runtime.CompilerServices' に存在しません

型または名前空間名 'CallerMemberNameAttribute' が名前空間 'System.Runtime.CompilerServices' に存在しません

4

2 に答える 2

2

まず、エラー メッセージには、 を追加するにはusing、F4 を押して表示されるダイアログに追加する必要があることが明確に示されています。

しかし、あなたの 2 番目のバージョンは動作するはずであり、私にとっては問題なく動作します。実際には C# 5.0 コンパイラがインストールされていないため、うまくいかないかもしれません。.Net 4.5 (更新されたコンパイラを含む) がインストールされていますか?

于 2012-10-31T20:23:20.650 に答える
0

System.Runtime.CompilerServicesLINQPad で 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 に答える