3つの名前付きパラメーターをコンストラクターに取り込む構造体があります...
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;
}
}
クラスを作成するメソッド呼び出しは、null許容のdoubleがnullでない場合にのみ、MyDataクラスを作成するために使用する3つのnull許容のdoubleを受け取ります。
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;
}
MyDataクラスを変更せずにこのメソッドを作成するためのより良い方法はありますか?つまり、名前付きパラメーターを条件付きで渡すことはできますか、それともデフォルトの名前付きパラメーター値を表すインジケーターを渡すことができますか?