Решарпская интеллигентская путаница - PullRequest
2 голосов
/ 15 июня 2010

Сегодня у меня произошло нечто странное в моей копии 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:

альтернативный текст http://i50.tinypic.com/285zfd.png

Обратите внимание, что он вызывает аргумент конструктора и заканчивается двоеточием: userName:

Что здесь происходит?

РЕДАКТИРОВАТЬ:

Как ответил Рид ниже, это новая функция C # 4 под названием Именованные и необязательные аргументы . Его цель - дать вам возможность указать имя аргумента, а не его позицию в списке параметров. поэтому вам не нужно запоминать позицию аргумента в списке аргументов, чтобы использовать его (хотя для intellisense это практически бессмысленно). Это облегчает использование необязательных аргументов.

Спасибо, Рид.

Ответы [ 2 ]

9 голосов
/ 15 июня 2010

Это Resharper, предоставляющий поддержку intellisense для Именованных и необязательных дополнений .

C # 4 добавлена ​​поддержка для них.Теперь вы можете иметь метод, определенный следующим образом:

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

Если вы хотите вызвать его с другим «userName», но оставить значение по умолчанию для других параметров, вы можете сделать:

this.DoWork(userName: "FooUser");

Resharper 5 добавляет поддержку этого синтаксиса в intellisense.

2 голосов
/ 15 июня 2010

Вы не включили;в конце userName

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