Snippets de código C#

No Visual Studio, você pode usar trechos de código para adicionar código comumente usado aos seus arquivos de código C#. Os snippets de código podem fazer com que escrever código de programa seja mais rápido, mais fácil e mais confiável.

Trechos de código de expansão são adicionados em pontos de inserção especificados. Trechos de código são adicionados em torno do código selecionado e estão disponíveis apenas para C# e C++. Para obter instruções sobre como inserir ou cercar código com trechos de código, consulte Trechos de código.

Referência de trecho de código

Trechos de código funcionam da mesma maneira em C# e C++, mas o conjunto de trechos de código padrão é diferente. Os seguintes trechos de código C# estão incluídos no Visual Studio por padrão:

Nome ou atalho Descrição Locais de inserção válidos
#if Cria uma directiva #if e uma directiva #endif . Em qualquer lugar.
#region Cria uma directiva #region e uma directiva #endregion . Em qualquer lugar.
~ Cria um finalizador (destruidor) para a classe que o contém. Dentro de uma classe.
Atributo Cria uma declaração para uma classe que deriva de Attribute. Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
verificado Cria um bloco checked. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
classe Cria uma declaração de classe. Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
ctor Cria um construtor para a classe que o contém. Dentro de uma classe.
cw Cria uma chamada para WriteLine. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
do Cria um loop dowhile . Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
else Cria um bloco if-else . Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
enum Cria uma declaração enum. Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
equals Cria uma declaração de método que substitui o método Equals definido na classe Object. Dentro de uma classe ou um struct.
exception Cria uma declaração para uma classe que deriva de uma exceção (Exception por padrão). Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
para Cria um loop for. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
foreach Cria um loop foreach. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
forr Cria um loop for que decrementa a variável de loop depois de cada iteração. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
if Cria um bloco if. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
indexador Cria uma declaração do indexador. Dentro de uma classe ou um struct.
interface Cria uma declaração interface. Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
invoke Cria um bloco que invoca um evento com segurança. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
iterator Cria um iterador. Dentro de uma classe ou um struct.
iterindex Cria um named par iterador e indexador usando uma classe aninhada. Dentro de uma classe ou um struct.
lock Cria um bloco lock. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
mbox Cria uma chamada para System.Windows.Forms.MessageBox.Show. Talvez seja necessário adicionar uma referência a System.Windows.Forms.dll. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
namespace Cria uma declaração de namespace. Dentro de um namespace, incluindo o namespace global.
prop Cria uma declaração de propriedade implementada automaticamente. Dentro de uma classe ou um struct.
propfull Cria uma declaração de propriedade com os acessadores get e set. Dentro de uma classe ou um struct.
propg Cria uma propriedade autoimplementada somente leitura com um acessador privadoset. Dentro de uma classe ou um struct.
sim Cria uma declaração de método principal staticint. Dentro de uma classe ou um struct.
struct Cria uma declaração struct. Dentro de um namespace (incluindo o namespace global), uma classe ou uma estrutura.
svm Cria uma declaração de método principal staticvoid. Dentro de uma classe ou um struct.
switch Cria um bloco switch. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
experimentar Cria um bloco try-catch. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
tryf Cria um bloco try-finally. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
unchecked Cria um bloco unchecked. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
unsafe Cria um bloco unsafe. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.
using Cria uma diretiva using. Dentro de um namespace, incluindo o namespace global.
while Cria um loop while. Dentro de um método, um indexador, um acessador de propriedade ou um acessador de evento.

Funções de trecho de código C#

As funções são especificadas no elemento Function do snippet de código. A tabela a seguir descreve as três funções disponíveis para uso com o elemento em trechos Function de código C#.

Função Descrição
GenerateSwitchCases(EnumerationLiteral) Gera uma instrução de opção e um conjunto de instruções de maiúsculas e minúsculas para os membros da enumeração especificada pelo parâmetro EnumerationLiteral. O EnumerationLiteral parâmetro deve ser uma referência a um literal de enumeração ou a um tipo de enumeração.
ClassName() Retorna o nome da classe que contém o snippet inserido.
SimpleTypeName(TypeName) Reduz o TypeName parâmetro à sua forma mais simples no contexto em que o trecho foi invocado.

Exemplo de GenerateSwitchCases

O exemplo a seguir mostra como usar a função GenerateSwitchCases. Quando você insere esse trecho e insere uma enumeração no $switch_on$ literal, o $cases$ literal gera uma case instrução para cada valor na enumeração.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>switch</Title>
            <Shortcut>switch</Shortcut>
            <Description>Code snippet for switch statement</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>expression</ID>
                    <ToolTip>Expression to switch on</ToolTip>
                    <Default>switch_on</Default>
                </Literal>
                <Literal Editable="false">
                    <ID>cases</ID>
                    <Function>GenerateSwitchCases($expression$)</Function>
                    <Default>default:</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    switch ($expression$)
                    {
                        $cases$
                    }
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Exemplo de ClassName

O exemplo a seguir mostra como usar a função ClassName. Quando você insere esse trecho, o $classname$ literal é substituído pelo nome da classe de inclusão nesse local no arquivo de código.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Common constructor pattern</Title>
            <Shortcut>ctor</Shortcut>
            <Description>Code Snippet for a constructor</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>type</ID>
                    <Default>int</Default>
                </Literal>
                <Literal>
                    <ID>name</ID>
                    <Default>field</Default>
                </Literal>
                <Literal default="true" Editable="false">
                    <ID>classname</ID>
                    <ToolTip>Class name</ToolTip>
                    <Function>ClassName()</Function>
                    <Default>ClassNamePlaceholder</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp" Format="CData">
                <![CDATA[
                    public $classname$ ($type$ $name$)
                    {
                        this._$name$ = $name$;
                    }
                    private $type$ _$name$;
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Exemplo de SimpleTypeName

Este exemplo mostra como usar a função SimpleTypeName. Quando você insere esse trecho em um arquivo de código, o $SystemConsole$ literal é substituído pela forma mais simples do Console tipo no contexto em que você invocou o trecho.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Console_WriteLine</Title>
            <Shortcut>cw</Shortcut>
            <Description>Code snippet for Console.WriteLine</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal Editable="false">
                    <ID>SystemConsole</ID>
                    <Function>SimpleTypeName(global::System.Console)</Function>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    $SystemConsole$.WriteLine();
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>