C#可選陣列引數
我知道這可以使用null,所以我有一個解決方法,但我想知道是否有一個更好的方法,我可以有一個可選的int []引數的類?
class PriceLevels { public int[] priceLevels { get; } private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 }; public PriceLevels(int[] newPriceLevels = defaultPriceLevels) { priceLevels = newPriceLevels; } }
這給我一個錯誤,表示它是一個無效的表示式defaultPriceLevels必須是常量.如何解決這個問題?
我可以做的一件事情就是這樣,但我並不喜歡這個解決方案
class PriceLevels { public int[] priceLevels { get; } private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 }; public PriceLevels(int[] newPriceLevels = null) { if(newPriceLevels == null) priceLevels = defaultPriceLevels; else priceLevels = newPriceLevels; } }
一個更好的設計在一起將是有2個建構函式獲得一個int []而另一個不是:
class PriceLevels { public int[] priceLevels { get; set; } private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 }; public PriceLevels() { priceLevels = defaultPriceLevels; } public PriceLevels(int[] newPriceLevels) { priceLevels = newPriceLevels; } }
如果沒有,不知道我是否會稱之為“更好”,但您可以使用params關鍵字:
class PriceLevels { public int[] priceLevels { get; set; } private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 }; public PriceLevels(params int[] newPriceLevels) { priceLevels = newPriceLevels.Length == 0 ? defaultPriceLevels : newPriceLevels; } }
另外,根據設計,我不相信PriceLevels有責任決定預設值是什麼,也許應該在任何情況下將其作為依賴關係 – 請參見ofollow,noindex" target="_blank">SOLID 和Dependency Injection .那麼你只能有一個建構函式:
class PriceLevels { public int[] priceLevels { get; set; } public PriceLevels(int[] newPriceLevels) { priceLevels = newPriceLevels; } }
http://stackoverflow.com/questions/39971222/c-sharp-optional-array-parameter-for-class
本站文章除註明轉載外,均為本站原創或編譯
轉載請明顯位置註明出處:C#可選陣列引數