2012-05-25 21 views
16

我有,我想格式化這樣的方法:如何格式化,以便垂直堆疊方法參數,每行一個?

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

基本上,如果方法定義將要超過行線的長度,我想那裏是每行一個參數。我不太在意這些逗號(如果它們出現在每行的結尾處,那很好)。

但R·格式,它是這樣,而是:

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

...所以,這行起來,但每一行有幾個參數,並挑選出任何一個參數,它只是很難。

順便說一句,當調用方法,它堆積一個參數每行,如果行的最大長度超過(儘管,在這種情況下,我幾乎喜歡它沒有)。

我已經進入R#選項,並探討了可用的各種複選框,但我沒有看到如何改善我的情況。想法?

+5

我會更關心你接受了很多論點。 – CaffGeek

+5

@CaffGeek沒有任何語境,我認爲跳躍參數的數量是錯位的。 – ErikE

回答

16

嘗試從這個路徑改變選項:

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

總是斬。我不知道是否可以按你想要的方式放置逗號,但至少每行會有一個參數。祝你好運!

1

如果你在挑選「任何一個參數」時遇到困難,那麼你應該認真考慮調整你應該如何設計這種方法。

Bob Martin叔叔(「Clean Code」)建議您最多有2-3個參數。如果你使用的不僅僅是這些,那麼你有可能沒有儘可能最乾淨的設計,這應該是一個心理暗示,重新審視你爲什麼要這樣設計它。

此外,我意識到這不是對你的問題的直接回答,但它可能是一個答案,使你的原始問題沒有意義(如果你決定減少參數的數量)。然而,這是你的代碼,所以它最終取決於你喜歡的。

3

爲什麼不把它們包裝在一個對象中並傳遞該對象。創建一個班級!然後你只傳遞一個參數。

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

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

這樣,稍後,您還可以添加一個驗證參數的方法。

如果你真的想要聰明,你可以添加GetThings方法到這個類,現在你在說OOP!

+0

@ Sam.Rueby:au contraire!我認爲OP的真正問題不在於參數不符合一行;真正的問題在於他沒有封裝這些內容,也沒有使用面向對象的原則。這就是他表現出「我的參數不符合一行」問題的原因。所以我認爲我的回答將解決他的問題。隨意添加您的答案。 – frenchie

+0

我明白。我不認爲每創建一個新的方法創建一個新的類時都不現實,而這個新的方法需要多個參數:最終會變得非常混亂。我也認爲人們建議不應該創建一個需要7個參數的方法是不現實的。是的,20可能是在設計欠佳的土地上。但是7不僅僅是合法的,特別是如果遵循更多的功能性編程原則而不是OOP。我確信他知道他可以創建一個類來封裝參數;這裏真正的問題是關於R#和它的能力。 –

+2

這個新類的構造函數有多少個參數?請問? –