2011-04-14 11 views
5

que tienen unas estructuras del fragmento de código de este modo:Funciones de código C# encargo Fragmento

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

Genera cosas como:

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

eso es una versión muy simplificada ... es realmente mucho más complicado ... y es solo mucha más información para escribir. Sería bueno si pudiera escribir $uppercaseName$, y luego una función de fragmento personalizado asignaría un valor a $lowercaseName$ ....

Pero, ¿es posible incluso escribir funciones de fragmentos personalizados? No veo nada al respecto en el documentation ...

Si es posible ... ¿cómo?

+0

Ojalá fuera posible ... AFAIK, no lo es. – SLaks

+0

Los campos encapsulantes en VS2017 pueden convertir mayúsculas a minúsculas, pero no descubrí cómo ... – Alamakanambra

Respuesta

1

Mi respuesta es Resharper. Plantillas en vivo.

Es muy molesto tener esta limitación, pero al igual que muchas otras limitaciones de Visual Studio, Resharper lo clava. Es un cerdo de rendimiento, por lo que opero con el análisis de código desactivado. La velocidad es aceptable, y las plantillas en vivo ahorran mucho tiempo.

Hay otras veinte buenas razones para tener una herramienta LIKE Resharper para que seas un codificador fantástico.

no puedo escribir "hola mundo" sin ReSharper más ... y no puedo depurar sin reflector = P

También, ir al Administrador de extensiones y haga clic en Galería en línea. Escriba "snippet" en el cuadro de búsqueda, y hay algunas herramientas que parecen que podrían ayudar de forma gratuita :). La galería de extensiones es pura productividad de oro.

2

En lugar de utilizar la convención de tener campos camelCase y propiedades de PascalCase, he adoptado una convención de usar subrayado inicial para campos de respaldo. El siguiente fragmento de código funciona para mí.

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

Y en un intento de desairar el "guión es un prefijo y prefijos son malos" guerra santa, que believ que sea más una convención que un prefijo al igual que v superior. Inferiores letras iniciales de las propiedades v. Parámetros . Cualquier uso de un campo con un guión bajo destacado fuera de su implementación de propiedad asociada debe ser código olor.

0

También uso y recomiendo el uso del prefijo _ para la variable privada de propiedades. A veces deseo que Microsoft permita el alcance de la variable privada dentro de la propiedad, como se indica a continuación, para evitar el acceso fuera de la propiedad.

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

No es posible. Pero encontré una forma interesante de personalizar los "fragmentos" que los amplían. Conectará un "fragmento" de otros "fragmentos". Cuando lo use, simplemente presione presionar TAB, ENTER, TAB ...

A continuación se muestra un ejemplo simple. Tenga en cuenta que cuando inserta la clase de fragmento, el fragmento de Prop ya estará seleccionado para presionar TAB. Ahora imagina varios fragmentos conectados como en una función usando expresiones

<?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> 
Cuestiones relacionadas