我有一个接受params列表的以下方法"Test":
Public void method Test(params double[] list]
{
Vols vol= new Vols();
//Fill the object based on the input list and
//pass this vol to other private method for further processing
}
Run Code Online (Sandbox Code Playgroud)
在此方法中,我使用名为Vols的自定义业务对象定义如下:
public class Vols
{
private double _vol09;
private double _vol05;
private double _vol01;
public Vols()
{
}
public double Vol09
{
get { return _vol09; }
set { _vol09 = value; }
}
public double Vol01
{
get { return _vol01; }
set { _vol01 = value; }
}
public double Vol05
{
get { return _vol05; }
set { _vol05 = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
方法"test"的用户可以传入以下值:test(0.1,0.9);
所以,根据传递的输入,我想只在业务对象"Vols"中设置相应的属性....即.在这种情况下,属性Vol01和Vol09将在方法"test"中设置.有没有办法做到这一点,以便我可以避免方法内的开关案例?
这可能是使用反射...但由于反射很昂贵,我还可以使用其他方法吗?另外,我是否应该使用switch-case语句或反射这里的良好编码实践?
谢谢.
如果使用对象初始化程序,它会更具可读性......
var test = new Test() { Vol01 = 0.1, Vol09 = ... }
Run Code Online (Sandbox Code Playgroud)
您的构造函数可以构造默认业务对象,您的属性setter可以调用Vols上的相应属性.
使用流畅的界面也是有意义的,当有复杂的,可变的构造函数设置时,它总是一个不错的选择......
var test = new Test().WithVol01(0.1).AndIntentRevealingName();
Run Code Online (Sandbox Code Playgroud)
或者,只需注入业务对象......
var test = new Test(new Vols(...setup how I want it tested...));
Run Code Online (Sandbox Code Playgroud)
在C#4.0中,您可以使用命名参数,所有酷孩子都在这样做......
var test = new Test(vol01: 0.1, ...);
Run Code Online (Sandbox Code Playgroud)
反思过度,我不会担心表现.如果我的测试用例清楚地显示出意图,我会担心.
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |