Функции фрагмента кода C # - PullRequest
5 голосов
/ 14 апреля 2011

У меня есть такие структуры кода:

    private $type$ $lowercaseName$;
    public $type$ $uppercaseName$
    {
        get { return $lowercaseName$; }
        set { $lowercaseName$ = value; }
    }

Он генерирует такие вещи, как:

    private string randomValue;
    public string RandomValue
    {
        get { return randomValue; }
        set { randomValue = value; }
    }

Это очень упрощенная версия ... она действительно намного сложнее ... и просто намного больше информации для ввода. Было бы неплохо, если бы вы могли ввести $uppercaseName$, а затем пользовательскую функцию сниппета. присвоит значение $lowercaseName$ ....

Но возможно ли даже написать собственные функции сниппета? Я ничего не вижу в документации 1012 * ...

Если это возможно ... как?

Ответы [ 5 ]

6 голосов
/ 30 апреля 2011

Это пока невозможно. См. Это предложение на 2010 год, в котором было отказано.

http://connect.microsoft.com/VisualStudio/feedback/details/523601/allow-custom-code-snippet-functions

Кажется, эта функция была предложена, когда были введены фрагменты, и была повторно предложена в каждой версии, и ее сбили, сказав, что у них недостаточно времени.

3 голосов
/ 13 декабря 2012

Вместо того, чтобы использовать соглашение о наличии полей camelCase и свойств PascalCase, я принял соглашение об использовании начального подчеркивания для вспомогательных полей.Следующий фрагмент кода работает для меня.

public $type$ $property$
{
    get { return _$property$;}
    set { _$property$ = value;}
}
private $type$ _$property$;
$end$

И в попытке игнорировать «подчеркивание - это префикс, а префиксы - это плохо» священная война, я считаю, что это скорее соглашение, чем префикс, очень похожий на верхнийv. нижние начальные буквы для свойств v. параметры.Любое использование поля с начальным подчеркиванием вне реализации связанного свойства должно иметь запах кода.

1 голос
/ 27 октября 2011

Мой ответ - Решарпер.Живые шаблоны.

Очень неприятно иметь это ограничение, но, как и многие другие ограничения Visual Studio, Решарпер прибивает его.Это снижение производительности, поэтому я работаю с отключенным анализом кода.Тогда скорость будет приемлемой, а живые шаблоны экономят много времени.

Есть еще около двадцати веских причин иметь инструмент LIKE Resharper, чтобы сделать вас фантастическим программистом.

Я могу 'я больше не могу писать "hello world" без Resharper ... и я не могу отладить его без Reflector = P

Кроме того, зайдите в Менеджер Расширений и нажмите Online Gallery.Введите «фрагмент» в поле поиска, и там есть несколько инструментов, которые выглядят так, как будто они могут помочь бесплатно :).Галерея расширений - чистое золото производительности.

0 голосов
/ 30 сентября 2015

Это невозможно.Но я нашел интересный способ настроить «сниппеты», расширяющие их.Вы будете подключать «сниппет» к другим «сниппетам».Когда вы используете просто нажмите TAB, ENTER, TAB ....

Ниже приведен простой пример.Обратите внимание, что когда вы вставляете класс сниппета, он уже выберет опору сниппета, чтобы нажать клавишу TAB.Теперь представьте несколько фрагментов, связанных как в функции, используя выражения

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>myclass</Title>
      <Shortcut>myclass</Shortcut>
      <Description>Code snippet for class</Description>
      <Author>Microsoft Corporation</Author>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
        <SnippetType>SurroundsWith</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>name</ID>
          <ToolTip>Class name</ToolTip>
          <Default>MyClass</Default>
        </Literal>
      </Declarations>
      <Code Language="csharp">
        <![CDATA[class $name$
    {
        prop$selected$$end$
    }]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
0 голосов
/ 12 декабря 2013

Я также использую и рекомендую использовать префикс _ для закрытой переменной свойств. Иногда я хочу, чтобы Microsoft разрешила область действия закрытой переменной внутри свойства, как показано ниже, чтобы предотвратить доступ за пределы свойства.

public string RandomValue
{
    private string randomValue;
    get { return randomValue; }
    set { randomValue = value; }
}
...