2

今日、Resharper 5 のコピーで奇妙なことが起こりました。次のようなクラスがあります。

public class Foo
{
    public string Username { get; private set; }

    public Foo (string userName) { Username = userName; }

    public void Bar()
    {
        DoWork(Username);
    }

    public void DoWork(string userName) { }
}

DoWork(us と入力し始めると、Intellisense から次のように表示されます。

代替テキスト

コンストラクター引数をプルアップしており、コロンで終わっていることに注意してください: userName:

何が起きてる?

編集:

以下で Reed が回答したように、これはNamed and Optional Argumentsと呼ばれる新しい C# 4 機能です。その目的は、パラメーター リスト内の位置ではなく、引数の名前を指定できるようにすることです。そのため、使用するために引数リスト内の引数の位置を覚えておく必要はありません (ただし、これは intellisense ではほとんど意味がありません)。ただし、オプションの引数を使いやすくします。

ありがとうリード。

4

2 に答える 2

9

これは、Named および Optional Arugmentsの Intellisense サポートを提供する Resharperです。

C# 4 では、これらのサポートが追加されました。次のようにメソッドを定義できるようになりました。

public void DoWork(int someArgument = 3, string userName = "default") 
{
    // ...

これを別の「userName」で呼び出したいが、他のパラメーターはデフォルトのままにしておく場合は、次のようにします。

this.DoWork(userName: "FooUser");

Resharper 5 では、Intellisense でのこの構文のサポートが追加されています。

于 2010-06-15T19:16:30.297 に答える
2

; を含めませんでした。ユーザー名の最後に

public Foo (string userName) { Username = userName; }
于 2010-06-15T19:15:21.013 に答える