Visual Studio Snippets - Как указать коллекцию цикла foreach - PullRequest
0 голосов
/ 24 мая 2009

При использовании ярлыков / фрагментов Visual Studio можно задавать коллекцию заранее / автоматически, а не заполнять зеленые поля после этого?

В этом случае я пытаюсь придумать что-то вроде следующего с наименьшим количеством возможных нажатий клавиш:

foreach (ListItem item in ListBox1.Items)
{
    //
}

Например, сочетание клавиш "CTRL + K, CTRL + X foreach" позволяет предположить, какую коллекцию я хочу перебрать, и обычно ошибается. Я часто сталкиваюсь со следующим:

foreach (object var in collection_to_loop)
{
        //
}

Если я наберу идентификатор коллекции и / или использую «Окружить с», он не будет работать лучше, поскольку выделит выделенный элемент в блоке цикла следующим образом:

foreach (ListItem item in ListBox1.Items)
{
    ListBox1.Items 
}

Есть ли способ сделать это? Я использую Visual Studio 2005, но был бы рад сообщить, что это можно сделать в 2008 году или с помощью плагина.


РЕДАКТИРОВАТЬ: ОК, кажется, я не только не объяснил, что я после того, как ясно, я увидел функцию Resharper, и думал, что это была встроенная функция VS. Оказывается, что это «живые шаблоны» от Resharper, которые предпринимают энергичную попытку угадать, какой тип коллекции поместить в цикл, и сделать это правильно примерно в 1/4 времени.

То, что я преследовал, было небольшим пониманием того, как Решарпер делает это предположение, и что я мог сделать (например, выделив идентификатор моей желаемой коллекции), чтобы дать ей подсказку. Я посмотрю на сайте Jetbrains и обновлю здесь, если найду что-нибудь.

Ответы [ 2 ]

3 голосов
/ 24 мая 2009

Я действительно не совсем знаю, как это сказать, но вы думаете, что вы, возможно, просите слишком много автоматизации? Я имею в виду, что фрагменты кода хороши тем, что они уменьшают повторяемость. Но теперь вы хотите, чтобы он действительно угадал, что вы собираетесь печатать в любом случае. Должен ли он угадать тело цикла?

Возможно, вы захотите заглянуть в CodeRush от Developer Express , который имеет гораздо более мощную функцию генерации кода, но я не уверен, что он сможет сделать то, что вы предлагаете.

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

Введите «ListBox1.Items», используя обычное значение intellisense, затем нажмите Alt-Enter и выберите «Перечислить коллекцию с foreach» (не точный текст).

Однако, если говорить точно о ListBox.Items (из Windows.Forms), он имеет тип ObjectCollection, который не является строго типизированным. Таким образом, почти невозможно угадать правильный тип элементов. Для WPF свойство Items также возвращает не строго типизированную коллекцию ItemCollection. Если у вас строго типизированная или универсальная коллекция, ReSharper может правильно определить тип элемента перечисления.

...