2010-08-18 8 views
9

R # 4.5 (respuestas a 5 son bienvenidos)
VS2008 (respuestas a VS2010 son bienvenidos)
C# (Fwiw)Genera automáticamente la variable * nombre * para que coincida con el parámetro que estás proporcionando?

estoy usando un constructor (la pregunta se aplica a los métodos, también), y no hay Intellisense:

Foo Constructor Intellisense, showing the parameter variable names

que todavía no tienen un valor para especificar para este primer parámetro, "Nombre". Hoy, I escriba "firstName", luego deje que el IDE cree esa variable para mí (que inicializo con algún valor).

Entiendo que el IDE creará la variable para mí. Quiero que cree el nombre de variable para mí.

No quiero tener que escribir "firstName". Me gusta el nombre de la variable que eligió el autor del parámetro, y quiero usar ese nombre de variable en mi código (de llamada).

¿Hay alguna manera de tener estos nombres de variable aceptables re-generated para mí (el código de llamada) automáticamente a medida que muevo, parámetro por parámetro, a través de esta línea de (llamada) de código?

+0

Ya estaría muy feliz si intellisense sugiriera una variable existente que tiene el mismo nombre que el parámetro ... – dtb

+0

No creo que estas personas entendieran su pregunta ... –

+0

Derecha ... recomendaciones para cambiar el ¿fraseología? O ... ¿no es un ... problema con la pregunta? – lance

Respuesta

2

Usted puede acercarse a lo que usted está buscando con VS2010.

  • Tipo p.Foo(

Esto abrirá la descripción del constructor seleccionado en ese momento, fuera de la lista de todos los constructores. Si escribe una letra, o presiona ctrl + espacio, se abrirá la autocompletación de intellisense.

La diferencia aquí entre VS2008 y VS2010 se denomina parámetros. En VS2010, su lista de finalización tendrá entradas para los parámetros nombrados firstName: y lastName:.

  • escribir la primera letra del nombre del parámetro (lo que usted se refiere como "el nombre de la variable del autor parámetro eligió")

Intellisense debe saltar directamente a esa entrada, y permitirá hacer finalización de la misma manera que generalmente lo hace.

  • escriba un espacio, escriba, o una coma

Intellisense que se inserte el identificador utilizado para el parámetro llamado. No insertará los dos puntos (a menos que lo escriba), por lo que no tiene que usar la función de parámetros nombrados para lograr su objetivo aquí. Puede aprovechar el hecho de que el texto que está buscando se encuentra en su lista de finalización.

Cómo logra que Visual Studio realmente genere las variables locales (que, de acuerdo con su pregunta, parece que ya lo ha resuelto) me desconcierta, y le corresponde a usted ocuparse de :) Si usted tiene tiene ese segundo problema lamido, me gustaría saber cómo, también.

+0

Esto resuelve mi problema. R # creará la variable para mí una vez que ve que yo ' he usado (sin los dos puntos) un identificador que no existe, dejándome proporcionar solo el * valor * de esa variable. La idea detrás de mi pregunta es hacer que dicte solo lo que el IDE no puede determinar. Tool IDE "escribe" todo * it * knows (el nombre del objeto que estoy llamando, el nombre de sus parámetros, etc.), dejándome solo para proporcionar lo que solo * I * sé (el * valor * real soy paso). El resto es ceremonia/repetición. – lance

0

Puede crear un fragmento de código que crea la variable y la inserta como parámetros.

MSDN Reference on snippets

+0

Gracias por la respuesta. Esto requeriría un fragmento único por cada método que llamo, lo cual no es práctico. Si me equivoco, ¿podría proporcionarme? ¿un ejemplo o una lectura citada que se dirige más precisamente a mi problema? – lance

0

No entiendo su situación por completo, pero estoy suponiendo que desea inyectar un nombre de variable de llamar a su montaje en el código de llamada. si es así, puede consultar System.CodeDom que le permite crear clases y sus miembros durante el tiempo de ejecución junto a una plétora de otras funcionalidades que ofrece.

+0

Gracias por la respuesta. Necesito una solución mientras escribo el código, no mientras está en ejecución. – lance

0

Estoy bastante seguro de que puede hacerlo con Resharper o CodeRush/Refactor.

0

Me parece que lo que intenta hacer es no escribir nada. Para que el IDE ponga el código en su intención, no es necesario. Un objetivo bastante elevado, con la excepción de que nos pondría a todos sin trabajo; (

Aparte de la diversión, lo que probablemente esté buscando es una herramienta genérica como T4 Toolbox (una de mis nuevos juguetes favoritos). Si está buscando una herramienta que autogenere sus fragmentos de código mientras escribe, la cosa más cercana sería Resharper

Aquí hay un ejemplo de un constructor de clase generé de mi personalización de plantillas T4 Toolbox:

public partial class EvaluationController : SmartController 
    { 
     private readonly IEvaluationService _evaluationSvc; 
     private readonly IEvaluationMapper _evaluationMapper; 
     private readonly IEvaluationCriterionMapper _evaluationCriterionMapper; 
     private readonly IParticipantEvaluationMapper _participantEvaluationMapper; 

     public EvaluationController(IEvaluationRepository repository, IEvaluationService evaluationSvc, IEvaluationMapper evaluationMapper, IEvaluationCriterionMapper evaluationCriterion, IParticipantEvaluationMapper participantEvaluation) 
     {//  : base(repository, evaluationMapper) 
       _evaluationSvc = evaluationSvc; 
       _evaluationMapper = evaluationMapper; 
      _evaluationCriterionMapper = evaluationCriterion; 
      _participantEvaluationMapper = participantEvaluation; 
     } 

Si eso es lo que está buscando, el lugar para comenzar sería: http://t4toolbox.codeplex.com/

Tengo un proyecto de ejemplo en el que utilizo personalizaciones de las plantillas para hacer girar mis clases de negocios, varios métodos & capa de repositorio.http://t4tarantino.codeplex.com/ Hay un ejemplo del nivel de complejidad de la producción se puede generar al http://geekswithblogs.net/JamesFleming/archive/2010/08/18/code-generation-with-t4-toolbox.aspx

HTH

Cuestiones relacionadas