Автозаполнение с помощью ReSharper и нового XYZ () intellisense - PullRequest
2 голосов
/ 15 мая 2009

У меня проблема с недавно установленной Visual Studio 2008 (новый компьютер) и ReSharper 4.5.

Редактировать : Проблема открыта по адресу: http://youtrack.jetbrains.com/issue/RSRP-107956.


У меня есть следующий код:

public static TValue GetOrCreate<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key)
    where TValue: new()
{
    #region Parameter Validation

    if (ReferenceEquals(null, key))
        throw new ArgumentNullException("key");

    #endregion

    TValue result;
    if (dictionary.TryGetValue(key, out result))
        return result;

    result = new <-- problem here
    dictionary.Add(key, result);
    return result;
}

Строка, помеченная как проблема, - это то, где у меня проблемы.

Когда я набираю это (| отмечает точку моего курсора):

result = new |

тогда я получаю выпадающий список значений IntelliSense с TValue в нем, и он выбран.

Независимо от того, что я сейчас печатаю, я получаю следующее:

result = new _  (|);

снова, | отмечает позицию курсора. Здесь есть несколько проблем:

  1. Независимо от того, что я печатаю, после подчеркивания вставляется символ табуляции, а не два пробела, как я должен был использовать выше.
  2. Я отключил добавление скобок и скобок по завершении, но они все еще добавлены для этой конкретной конструкции
  3. Кажется, невозможно заставить ReSharper вставлять выбранный тип, вместо этого он добавляет только подчеркивание (нет, подчеркивание - не мой способ сказать «тип идет сюда», оно расширяется до того, что я показал выше, без тип, но с подчеркиванием + символ табуляции вместо)

Ключи, которые я пытался нажать, когда intellisense активен:

  • Пробел (разница: скобки выглядят так: (|), т.е. добавлен пробел)
  • Tab
  • Введите
  • (- то есть открывающая скобка
  • T + любой из вышеперечисленных (то есть напечатайте первую букву TValue и надейтесь, что это помогает, а это не так)

Единственное, что «помогает», - это если я нажму одну из клавиш, которая переключается в более полное раскрывающееся меню intellisense, например, Alt-Right по умолчанию, тогда оно просто добавляет гораздо больше вещей, которые я могу выбрать, все еще с выбранным TValue, но Теперь, если я нажму Enter или Tab, код будет расширен правильно.

Кто-нибудь знает, что мне нужно настроить?


Редактировать : Перед публикацией я подумал о методе и решил, что валидация параметров там, вероятно, не нужна, поэтому я забрал его, и вот, теперь он автоматически завершается правильно.

Это просто (еще одна) ошибка в ReSharper?

Обратите внимание, что если я правильно напишу код в этой строке, т.е. пишите TValue вместо подчеркивания, проект строится.


Редактировать : Обратите внимание, что в ReSharper нет активных шаблонов, которые были включены, это было первое, что я отключил, просто чтобы проверить, не был ли странный шаблон, который отвергал мой выбор.

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Я был пользователем ReSharper с версии 1.5, и я заметил определенный паттерн. Сначала они поддерживают функцию C #, затем они поддерживают ее достаточно хорошо, затем они поддерживают ее хорошо, за исключением крайних случаев, и, наконец, они поддерживают ее хорошо, за исключением редких ошибок.

Они на шаге 2 или, возможно, 3, с генериками. Они достигли точки, когда внутри GetOrCreate они знают, что TValue является параметром типа, и даже сейчас знают, что он имеет ограничение new(), и поэтому его следует рассматривать как тип с конструктором, насколько это возможно. как завершение после "нового". Но у них, похоже, есть небольшая ошибка, связанная с тем, что эта функция работает плавно.

Пожалуйста, делайте сообщите об этом им, чтобы они могли перейти к шагу 4, надеюсь, до выхода C # 4.0, с ковариацией и контравариантностью отправляет их обратно к шагу 2.

1 голос
/ 15 мая 2009

Я могу подтвердить это поведение. Я получаю точно такие же результаты.

Для меня это помогает ввести две буквы 'TV', тогда интеллект (Tab или Ctrl + Space) расширится до TValue (|). Однако это не работает, когда я набираю «новый» и прямо на «ТВ». После 'нового' я должен нажать Esc ... странное поведение, действительно ...

ОБНОВЛЕНИЕ: это регион, который приводит к этой проблеме ... мне помогает удаление региона (только два ключевых слова #region - не предложение if).

...