2012-05-25 7 views
16

Ich habe eine Methode, die ich so formatiert werden soll:Wie formatiere ich, damit die Parameter der Methode vertikal gestapelt werden, einer pro Zeile?

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) { 

Grundsätzlich, wenn die Methodendefinition die Länge der Linie Linie überschreiten wird, würde ich es gerne pro Zeile ein Parameter sein. Ich mache mir keine Gedanken über die Kommas (wenn sie am Ende jeder Zeile erscheinen, ist das in Ordnung).

Aber R # Formate es wie folgt statt:

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) { 

... so, es Linien sie auf, aber es gibt mehrere Parameter pro Zeile und es ist nur schwer eine beliebige Parameter auszuwählen.

Übrigens, wenn Aufruf Methoden, Stacks Argumente one-per-line, wenn die maximale Zeilenlänge überschritten wird (obwohl, in diesem Fall, würde ich fast bevorzugen es nicht).

Ich bin in R # Optionen gegangen und erkundete dort eine breite Palette von Kontrollkästchen zur Verfügung, aber ich sehe nicht, wie ich meine Situation verbessern kann. Ideen?

+5

Ich wäre mehr besorgt, dass Sie so viele Argumente akzeptieren. – CaffGeek

+5

@CaffGeek Ohne Kontext, ich denke, auf die Menge der Parameter springen ist fehlplatziert. – ErikE

Antwort

16

Versuche von diesem Pfad zu ändern Option:

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

immer zu hacken. Ich weiß nicht, ob es möglich ist, Komma so zu platzieren, wie Sie wollen, aber zumindest würde es einen Parameter pro Zeile geben. Viel Glück!

1

Wenn Sie Probleme haben, "einen Parameter" auszuwählen, sollten Sie ernsthaft darüber nachdenken, wie Sie diese Methode entwerfen sollten.

Onkel Bob Martin ("Clean Code") empfiehlt, dass Sie 2-3 Parameter max. Wenn Sie mehr als das verwenden, dann haben Sie wahrscheinlich nicht das sauberste Design, und es sollte ein mentaler Hinweis sein, nochmals zu überdenken, warum Sie es so gestalten wollen.

Auch ich weiß, dass dies keine direkte Antwort auf Ihre Frage ist, aber es könnte eine Antwort sein, die Ihre ursprüngliche Frage macht (wenn Sie die Anzahl der Parameter reduzieren möchten). Es ist jedoch Ihr Code, also liegt es letztendlich an Ihnen, was Sie bevorzugen.

3

Warum nicht diese in ein Objekt einbinden und das Objekt übergeben. Erstelle eine Klasse! Und dann übergeben Sie nur einen Parameter.

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

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

Auf diese Weise könnten Sie später auch eine Methode hinzufügen, die beispielsweise Parameter validiert.

Und wenn Sie wirklich clever sein wollten, könnten Sie die Methode GetThings zu dieser Klasse hinzufügen und jetzt sprechen Sie OOP!

+0

@ Sam.Rueby: au contraire! Ich denke, das eigentliche Problem des OP besteht nicht darin, dass die Parameter nicht in eine Zeile passen. Das eigentliche Problem ist, dass er diese nicht einkapselt und keine OOP-Prinzipien verwendet. Und das ist der Grund, warum er mit dem scheinbaren "meine Parameter passen nicht in eine Linie" Problem konfrontiert ist. Also denke ich, dass meine Antwort sein Problem lösen wird. Fühlen Sie sich frei, Ihre Antwort auch hinzuzufügen. – frenchie

+0

Ich verstehe. Ich glaube einfach nicht, dass es überhaupt realistisch ist, jedes Mal, wenn eine neue Methode erstellt wird, die mehr als ein paar Parameter benötigt, eine neue Klasse zu erstellen: das wird am Ende wirklich unordentlich.Ich denke auch nicht, dass es realistisch ist, dass Leute vorschlagen, dass eine Methode * nie * erstellt werden sollte, die ~ 7 Parameter benötigt. Ja, 20 ist wahrscheinlich in schlechtem Designland. Aber 7 ist mehr als legitim, vor allem, wenn man mehr funktionalen Programmierungsprinzipien statt OOP folgt. Ich bin sicher, dass er weiß, dass er eine Klasse erstellen kann, um Parameter zu kapseln; Die eigentliche Frage betrifft R # und seine Fähigkeiten. –

+2

Und wie viele Argumente braucht der Konstruktor für diese neue Klasse? Frage nur? –