2008-10-02 22 views
28

¿Hay alguna manera de que pueda cambiar la forma en que se representa un literal de un fragmento de código cuando se usa en el código generado por el fragmento?Formateo de parámetros literales de un fragmento de código C#

Específicamente me gustaría saber si puedo tener un literal llamada decir, $ $ PropertyName y luego obtener el motor fragmento de hacer "_ $ $ PropertyName donde el primer carácter se hace minúsculas.

que pueda 't produce R #. por favor ayuda :)

+0

Ver mi sugerencia de [Agregar secuencias de comandos para fragmentos de código (T4 + Roslyn)] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/5805587-add -scripting-to-code-snippets-t4-roslyn). Desafortunadamente no obtuve respuesta a esta sugerencia. –

Respuesta

20

por desgracia, no parece haber ninguna manera. fragmentos ofrecen apoyo increíblemente limitado para transformation functions como se puede ver.

hay que seguir con la solución estándar VS, que es para escribir dos literales: uno para el nombre de la propiedad y el otro para el nombre de la variable miembro.

+0

¡Gracias! No pude encontrar nada tampoco, y el atributo de la función no parece extensible (¡Y solo tiene 3 funciones para elegir!?!) Si solo pudiera activar la característica de cambiar el nombre automáticamente después de que se haya hecho el fragmento ... –

+0

Hola Michael y Caerbanog, tenía exactamente la misma idea :-) ¿Has encontrado una forma hasta el 2008? Muchas gracias –

+1

Parece que esto sigue siendo cierto para Visual Studio 2010 ... – hfrmobile

4

una "solución" puede ser el uso de un prefijo en el nombramiento o la variable miembro, es decir .:

string m_$name$; 
string $name$ 
{ 
get{return m_$name$;} 
set{m_$name$=value;} 
}; 
+2

Sí, pero no le permite cambiar la carcasa de $ name $ para que sea camelCase. (Normalmente, la gente usa '" _property "' como respaldo de una propiedad llamada '" Propiedad "', etc. Además, "m_" está muy obsoleto ... ya que, como vb6 ...? Nunca lo use). – BrainSlugs83

1

Puede introducir una primera letra mayúscula, a continuación, un nombre de propiedad, a continuación, un menor primera letra. Prueba este fragmento:

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <Header> 
    <Title>Notifiable Property</Title> 
    <Author>Nikolay Makhonin</Author> 
    <Shortcut>propn</Shortcut> 
    <Description>Property With in Built Property Changed method implementation.</Description> 
    <SnippetTypes> 
     <SnippetType>SurroundsWith</SnippetType> 
     <SnippetType>Expansion</SnippetType> 
    </SnippetTypes> 
    </Header> 
    <Snippet> 
    <Declarations> 
     <Literal> 
      <ID>Type</ID> 
      <Default>Type</Default> 
     </Literal> 
     <Literal> 
      <ID>P</ID> 
      <Default>P</Default> 
     </Literal> 
     <Literal> 
      <ID>roperty</ID> 
      <Default>ropertyName</Default> 
     </Literal> 
     <Literal> 
      <ID>p</ID> 
      <Default>p</Default> 
     </Literal> 
     <Literal> 
      <ID>Ownerclass</ID> 
      <ToolTip>The owning class of this Property.</ToolTip> 
      <Function>ClassName()</Function> 
      <Default>Ownerclass</Default> 
     </Literal> 
    </Declarations> 
    <Code Language="CSharp"> 
     <![CDATA[#region $P$$roperty$ 

     private Field<$Type$> _$p$$roperty$; 
     public static readonly string $P$$roperty$PropertyName = GetPropertyName(() => (($Ownerclass$)null).$P$$roperty$); 
     public $Type$ $P$$roperty$ 
     { 
      get { return _$p$$roperty$; } 
      set { Set(ref _$p$$roperty$, value); } 
     } 

     #endregion 

]]> 
    </Code> 
    </Snippet> 
</CodeSnippet> 
Cuestiones relacionadas