2012-05-25 9 views
16

Mam metodę że chcę sformatowany tak:Jak sformatować, aby parametry metody były ułożone pionowo, po jednym w linii?

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

Zasadniczo, jeśli definicja metoda będzie przekraczać długość linii wiersza, chciałbym tam być jeden parametr w wierszu. Nie przejmuję się zbytnio przecinkami (jeśli pojawiają się na końcu każdej linii, jest to w porządku).

Ale R # formaty to tak, zamiast:

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

... tak, to linie je, ale istnieje kilka parametrów na linii i to jest po prostu trudno wyłowić któregokolwiek parametru.

Nawiasem mówiąc, gdy wywoływanie metod, stosy argumentów jeden-na-wiersz, jeśli maksymalna długość linii jest większa (mimo że w tym przypadku wolałbym, aby nie było).

Poszedłem do opcji R # i zbadałem tam szeroki wachlarz dostępnych pól wyboru, ale nie widzę sposobu, aby poprawić moją sytuację. Pomysły?

+5

Byłbym bardziej zaniepokojony, że akceptujesz wiele argumentów. – CaffGeek

+5

@CaffGeek Bez kontekstu, myślę, że przeskakiwanie ilości parametrów jest niewłaściwie umieszczone. – ErikE

Odpowiedz

16

Spróbuj zmienić opcję z tej ścieżki:

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

Chop zawsze. Nie wiem, czy możliwe jest umieszczenie przecinka tak, jak chcesz, ale przynajmniej w każdym wierszu byłby jeden parametr. Powodzenia!

1

Jeśli masz problem z wybieraniem "dowolnego parametru", powinieneś poważnie rozważyć zmianę sposobu zaprojektowania tej metody.

Wujek Bob Martin ("Czysty kod") zaleca, aby mieć maksymalnie 2-3 parametry. Jeśli używasz więcej, istnieje ryzyko, że możesz nie mieć możliwie najczystszego wzoru, i powinna to być mentalna wskazówka, aby ponownie rozważyć, dlaczego chcesz zaprojektować go w ten sposób.

Ponadto zdaję sobie sprawę, że nie jest to bezpośrednia odpowiedź na twoje pytanie, ale może to być odpowiedź, która sprawia, że ​​twoje pierwotne pytanie jest dyskusyjne (jeśli zdecydujesz, że chcesz zmniejszyć liczbę parametrów). Jest to jednak Twój kod, więc zależy to od tego, co lubisz.

3

Dlaczego nie zawinąć ich w obiekcie i nie przekazać obiektu. Stwórz klasę! A potem podajesz tylko jeden parametr.

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

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

W ten sposób można również dodać metodę, która sprawdza poprawność parametrów dla instancji.

A jeśli naprawdę chcesz być sprytny, możesz dodać do tej klasy metodę GetThings, a teraz mówisz OOP!

+0

@ Sam.Rude: au contraire! Uważam, że prawdziwym problemem PO nie jest to, że parametry nie mieszczą się w jednej linii; prawdziwym problemem jest sposób, w jaki on ich nie zamyka i nie stosuje zasad OOP. I właśnie dlatego wpada na pozorne "moje parametry nie pasują do jednej linii". Myślę więc, że moja odpowiedź rozwiąże jego problem. Możesz również dodać swoją odpowiedź. – frenchie

+0

Rozumiem. Po prostu nie wydaje mi się, żeby było realistycznie tworzyć nową klasę za każdym razem, gdy tworzona jest nowa metoda, która wymaga więcej niż kilku parametrów: to po prostu skończy się naprawdę nieporządkiem.Nie sądzę też, by ludzie sugerowali, że metoda powinna nigdy nie zostać stworzona, która wymaga ~ 7 parametrów. Tak, 20 jest prawdopodobnie w słabo zaprojektowanym terenie. Ale 7 jest więcej niż uzasadnione, szczególnie jeśli podąża się za bardziej funkcjonalnymi zleceniodawcami zamiast OOP. Jestem pewien, że wie, że mógłby stworzyć klasę do enkapsulacji parametrów; prawdziwe pytanie dotyczy R # i jego możliwości. –

+2

A ile argumentów zajmuje konstruktor dla tej nowej klasy? Tylko pytam? –

Powiązane problemy