ref out default values
我仍在努力学习,因为我不认识许多有良好编程知识的同龄人,所以我告诉自己,如果在互联网上找不到正确的答案,就要开始问更多关于良好编程实践的问题。
我想知道这个场景的最佳方法是什么。我有一个函数,它应该根据一些也计算在内的数据来计算一个参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
现在我可以从函数中得到一些其他参数。唯一的问题是我不想在我使用函数的每个地方都这样做。
有些地方像这样
1 | CountAvailability(tempStartDate, tempEndDate, machine , ref machineUptime, ref machineDownTime ) |
在其他方面,功能应该保持不变。
1 | CountAvailability(tempStartDate, tempEndDate, machine) |
但我必须通过一个空的已声明的浮点才能使其生效。有没有其他方法让这个工作?或者可能还有其他更清洁的解决方案?
最好的问候!
最简单的解决方案(就更改很少的代码而言)是过载:
1 2 3 4 5 | private float CountAvailability(DateTime startDate, DateTime endDate, string machine) { float ignored1 = 0f, ignored2 = 0f; return CountAvailability(startDate, endDate, machine, ref ignored1, ref ignored2); } |
但是,您应该使这些
您还应该考虑将该方法更改为如下内容:
1 2 | private Availability GetAvailability(DateTime startDate, DateTime endDate, string machine) |
其中