I have a structure that takes 3 named parameters in a constructor ...
public struct MyData
{
private readonly double _value1;
private readonly double _value2;
private readonly double _value3;
public MyData(
double value1 = 1.0,
double value2 = 2.0,
double value3 = 3.0)
{
_value1 = value1;
_value2 = value2;
_value3 = value3;
}
}
A call to the method that the class creates gets in the three valid doubling values that I want to use to create the MyData class only if the zero number doubles not equal ...
public MyData CreateMyData(double? value1, double? value2, double? value3)
{
MyData myData;
if (value1.HasValue)
{
if (value2.HasValue)
{
if (value3.HasValue)
{
myData = new MyData(value1, value2, value3);
}
else
{
myData = new MyData(value1, value2);
}
}
else
{
if (value3.HasValue)
{
myData = new MyData(value1, value3: value3);
}
else
{
myData = new MyData(value1);
}
}
}
else
{
if (value2.HasValue)
{
if (value3.HasValue)
{
myData = new MyData(value2: value2, value3: value3);
}
else
{
myData = new MyData(value2: value2);
}
}
else
{
if (value3.HasValue)
{
myData = new MyData(value3: value3);
}
else
{
myData = new MyData();
}
}
}
return myData;
}
Is there a better way to write this method without changing the MyData class? That is, is it possible to conditionally pass named parameters, or can I pass an indicator to represent the default values by default?
source
share