2012-05-25 9 views
16

tengo un método que quiero formateado como esto:¿Cómo formateo para que los parámetros del método se apilen verticalmente, uno por línea?

public static IQueryable<ThingRequest> GetThings(this EntityContext one 
               , int? two = null 
               , int? three = null 
               , int? four = null 
               , int? five = null 
               , String six = null 
               , IEnumerable<String> seven = null) { 

Básicamente, si la definición del método va a exceder la longitud de la línea de la línea, me gustaría que haya un parámetro por línea. No estoy demasiado preocupado por las comas (si aparecen al final de cada línea, está bien).

Pero R # formatea como éste, en su lugar:

public static IQueryable<ThingRequest> GetThings(this EntityContext one, int? two = null, int? three = null, int? four = null, int? five = null, 
                String six = null, IEnumerable<String> seven = null) { 

... Por lo tanto, los alinea, pero hay varios parámetros por línea y es simplemente difícil de retirar todo un parámetro.

Por cierto, cuando llama a métodos, apila argumentos uno por línea si la longitud máxima de la línea es superior (aunque, en ese caso, casi preferiría que no lo hiciera).

He entrado en las opciones de R # y exploré una amplia gama de casillas de verificación disponibles, pero no veo cómo mejorar mi situación. Ideas?

+5

Me preocuparía más que aceptes tantos argumentos. – CaffGeek

+5

@CaffGeek Sin contexto, creo que saltar de la cantidad de parámetros está fuera de lugar. – ErikE

Respuesta

16

trate de cambiar la opción de este camino:

ReSharper | Options -> 
Code Editing | C# | Formatting style | Line breaks and Wrapping -> 
Line wrapping | Wrap formal parameters 

a cortar siempre. No sé si es posible colocar la coma de la manera que desee, pero al menos habría un parámetro por línea. ¡Buena suerte!

1

Si tiene problemas para seleccionar "cualquier parámetro", entonces debe considerar seriamente ajustar cómo debe diseñar este método.

Uncle Bob Martin ("Código de limpieza") recomienda tener 2-3 parámetros como máximo. Si está utilizando más que eso, es probable que no tenga el diseño más limpio posible, y debería ser una pista mental para volver a visitar el motivo por el que desea diseñarlo.

Además, me doy cuenta de que esta no es una respuesta directa a su pregunta, pero podría ser una respuesta que haga que su pregunta original sea discutible (si usted decide que quiere reducir el número de parámetros). Sin embargo, es su código, por lo que finalmente es lo que usted prefiere.

3

¿Por qué no envolver estos en un objeto y pasar el objeto. ¡Crear una clase! Y luego estás pasando solo un parámetro.

public class MyParam 
{ 
    public EntityContext one { get; set; } 
    public Nullable<int> two { get; set; } 
    ..... 
} 

public static IQueryable<ThingRequest> GetThings(MyParam TheParameters) {...} 

De esta forma, más adelante, también podría agregar un método que valide parámetros, por ejemplo.

Y si realmente quería ser inteligente, podría agregar el método GetThings a esta clase y ¡ahora está hablando OOP!

+0

@ Sam.Rueby: au contraire! Creo que el verdadero problema del OP no es que los parámetros no encajen en una línea; el verdadero problema es la forma en que no los encapsula y no usa los principios de OOP. Y esa es la razón por la que está tropezando con el aparente problema de "mis parámetros no encajan en una línea". Entonces creo que mi respuesta resolverá su problema. Siéntase libre de agregar su respuesta también. – frenchie

+0

Entiendo. Simplemente no creo que sea realista crear una nueva clase cada vez que se crea un nuevo método que requiera más de unos pocos parámetros: eso terminará realmente desordenado.Tampoco creo que sea realista que la gente sugiera que se debe * crear * un método que tenga ~ 7 parámetros. Sí, 20 probablemente esté en un terreno de diseño pobre. Pero 7 es más que legítimo, especialmente si se siguen más principios de programación funcional en lugar de OOP. Estoy seguro de que sabe que podría crear una clase para encapsular parámetros; la verdadera pregunta aquí es con respecto a R # y sus habilidades. –

+2

¿Y cuántos argumentos usa el constructor para esta nueva clase? ¿Solo preguntaba? –

Cuestiones relacionadas