I know this can be done using null
so I have a workaround for that, but I was wondering if there was a better way that I can have an optional int[]
parameter for a class?
class PriceLevels
{
public int[] priceLevels { get; }
private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 };
public PriceLevels(int[] newPriceLevels = defaultPriceLevels)
{
priceLevels = newPriceLevels;
}
}
This gives me an error saying it is an invalid expression defaultPriceLevels
must be constant. How can I fix this?
One workaround that I can thing of is this, but I don't really like the solution
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;
}
}
You can overload your constructor.
Just create an overload of the constructor! It can be really easily done with one line of code!
Then, remove the default parameter value from the original constructor:
Actually, you also need to declare
defaultPriceLevels
asstatic
. Hopefully you don't mind that.A better design all together would be to have 2 constructors (constructor overload) one that gets a
int[]
and another that doesn't:If not, don't know if i'd call this "better" but you can use the
params
keyword:Also, depending on design, I'm not convinced that it is
PriceLevels
responsibility to decide what the default values are and maybe it should get it as a dependency in any case - See SOLID and Dependency Injection. Then you'd have only 1 constructor:Optional array parameters are not possible in C#. From MSDN
Therefore a "workaround" has to be used. Either check for null (as you suggested) or you can use a default constructor.
You could create another constructor with no parameters that would just pass your defaultPriceLevels variable to the constructor you already have? You'd have to change the variable to static too.
e.g.
Another option in the Crowd :), which is closest to your original code