ref out default values
本文关键字:values default out ref | 更新日期: 2023-09-27 18:27:12
我仍在努力学习,由于我不认识很多有良好编程知识的同龄人,我告诉自己,如果我在互联网上找不到正确的答案,就开始问更多关于良好编程实践的问题。
我想知道这种情况下最好的方法是什么。我有一个函数,它应该根据一些数据对参数进行计数。
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)
但我必须传递一个空的已声明浮点值才能使其工作。有其他方法可以让它发挥作用吗?或者可能还有另一种更清洁的解决方案?
致以最良好的问候!
最简单的解决方案(就更改很少的代码而言)是有一个重载:
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
参数指示的所有内容。然后你就不需要过载了-你只需要忽略你不感兴趣的结果中的任何部分