我还在努力学习,因为我不认识很多具有良好编程知识的同行,我告诉自己,如果我在互联网上找不到正确的答案,就会开始提出更多关于良好编程习惯的问题。
我想知道这种情况的最佳方法是什么。我有一个函数应该根据一些数据来计算参数。
private float CountAvailability(DateTime startDate, DateTime endDate, string machine)
{
float value=0;
float machineUptime = _repostory.Select(machine);
float machineDownTime = _repostory2.Select(machine);
value = machineUptime *machineDownTime ;
//some other magic here
return value;
}
对于coruse,这是一个示例代码,实际上它要复杂得多。
现在我已经在我的代码中的其他几个地方使用了这个函数,现在还需要从它传递一些其他参数。我不想在其他地方再次计算它们,我也不想重复我的代码以便为此目的创建该函数的副本,所以我想使用ref或out。
private float CountAvailability(DateTime startDate, DateTime endDate, string machine,
ref float machineUptime , ref float machineDownTime )
{
float value=0;
float machineUptime = _repostory.Select(machine);
float machineDownTime = _repostory2.Select(machine);
value = machineUptime *machineDownTime ;
//some other magic here
return value;
}
现在我可以从函数中获取一些其他参数。唯一的问题是我不想在我使用该功能的每个地方都这样做。
有些地方就像这样
CountAvailability(tempStartDate, tempEndDate, machine , ref machineUptime, ref machineDownTime )
而在其他人中,功能应该保持不变。
CountAvailability(tempStartDate, tempEndDate, machine)
但我必须传递一个空的声明浮点数才能使其正常工作。 还有另一种方法可以让它发挥作用吗?或者可能还有其他更清洁的解决方案?
祝你好运!
答案 0 :(得分:2)
最简单的解决方案(就改变很少的代码而言)就是过载:
private float CountAvailability(DateTime startDate, DateTime endDate, string machine)
{
float ignored1 = 0f, ignored2 = 0f;
return CountAvailability(startDate, endDate, machine, ref ignored1, ref ignored2);
}
但是,您应该使用这些out
参数而不是ref
参数,因为您不使用现有值。
您还应该考虑将方法更改为:
private Availability GetAvailability(DateTime startDate, DateTime endDate,
string machine)
其中Availability
将包含您当前使用返回值和out
参数指示的所有内容。然后你不需要重载 - 你只需忽略你不感兴趣的结果的任何部分。(这意味着浪费的工作,当然......如果计算其中一条信息是非常昂贵的使用过,您可能想要考虑替代策略。)