Visual Studio: возможно ли определить пользовательские функции для использования в собственных фрагментах кода? - PullRequest
9 голосов
/ 15 февраля 2010

Я хочу написать фрагмент Visual Studio, который позволит мне быстро создать класс вида:

public SomeClass
{
    public SomeType SomeProperty { get; private set; }
    public SomeClass(SomeType someProperty) { SomeProperty = someProperty; }
}

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

Я уже посмотрел на XML для фрагментов и обнаружил, что есть определенные функции, которые можно использовать. Например, встроенный фрагмент кода «switch» содержит следующую инструкцию:

<Function>GenerateSwitchCases($expression$)</Function>

Согласно этой странице документации MSDN , в этом теге <Function> можно использовать три встроенные функции. К сожалению, ни один из них не делает то, что я хочу (строчная буква первая). Можно ли определить функцию, которую я затем смогу использовать в своем фрагменте?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2010

Нет, это невозможно в Visual Studio сегодня. Определение и выполнение функций сниппета напрямую контролируется языковой службой C #. В настоящее время это не точка расширения. Это рассматривается для будущей версии продукта, хотя.

0 голосов
/ 05 сентября 2010

Ознакомьтесь с этой статьей о создании фрагмента кода, который определяет переменные, которые могут использоваться несколько раз и должны вводиться только один раз: http://www.switchonthecode.com/tutorials/csharp-tutorial-visual-studio-code-snippets

<Snippet>
  <Declarations>
    <Literal>
      <ID>startTime</ID>
      <ToolTip>Beginning Time Variable</ToolTip>
      <Default>startTime</Default>
    </Literal>
    <Literal>
      <ID>message</ID>
      <ToolTip>Replace This With Your Description</ToolTip>
      <Default>My function</Default>
    </Literal>
    <Literal Editable="false">
      <ID>DiagnosticsDebug</ID>
      <Function>
        SimpleTypeName(global::System.Diagnostics.Debug)
      </Function>
    </Literal>
  </Declarations>
  <Code Language="CSharp">
    <![CDATA[
   long $startTime$ = Environment.TickCount;
   $selected$ $end$
   $DiagnosticsDebug$.WriteLine(String.Format(
       "$message$ took {0} ticks.", Environment.TickCount - $startTime$));
   ]]>
  </Code>
</Snippet>
...