【发布时间】:2011-09-13 10:10:43
【问题描述】:
我有一个结构,它在构造函数中接受 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;
}
}
创建类的方法调用接收三个可空的双精度,只有当可空双精度不为空时,我才想使用它们来创建 MyData 类...
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 类? IE。 我可以有条件地传递命名参数还是传递一个指标来表示默认的命名参数值?
【问题讨论】:
-
为什么不想修改
MyData? -
在大多数情况下我都会这样做,我只是想知道是否有一种方法可以在不修改 MyData 的情况下做到这一点。我问这个以防万一我遇到 MyData 不受我控制的情况(例如 3rd 方库或其他东西)。
-
至少目前,大多数 .Net 库不使用可选参数。
-
仅供参考,在您的示例中,因为 MyData 是
struct而不是class,请务必注意CreateMyData2(null,null,null)将返回 MyData 与_value1,_value2,_value3相等为零。无论如何,结构都有默认构造函数,并且将优先于可选参数构造函数。
标签: c# c#-4.0 named-parameters