替换数组以避免使用基于0的索引

时间:2016-01-13 12:05:04

标签: c# api

我写了一个小API来允许用户控制电源。 PowerController对象可以打开或关闭电源端口:

PowerController.SwitchOn(1)
PowerController.SwitchOff(3)

PowerController可以通过指定1到4之间的整数来切换四个不同端口的电源。用户还可以使用以下方式回读所有四个端口的状态:

PowerController.GetPortStatus()

此函数返回一个布尔数组,其中包含4个端口中的每个端口的true / false值。我的API的用户不喜欢他们必须指定基于1的索引来打开或关闭端口这一事实,但必须使用基于0的索引来检查给定端口的状态。返回端口状态的最佳方法是什么,以便用户可以使用在打开或关闭端口时使用的相同的1索引号?

4 个答案:

答案 0 :(得分:1)

您可以返回Dictionary<int, bool>,其中Key是端口的从1开始的索引,Value是端口的状态。这样,用户可以使用基于1的索引,如下所示:

Dictionary<int, bool> portsStatus = PowerController.GetPortStatus();

bool statusOfPort1 = portsStatus[1];

答案 1 :(得分:0)

如果我掌握了你的想法,那么在运行这种方法时

  

PowerController.GetPortStatus()

只返回一个数组,其中数组的索引是PORT,而Value(0,1)是一个标志:1- ON,0 - OFF

例如: 返回new int {-1,0,0,0,1}(只有端口4处于活动状态)

答案 2 :(得分:0)

我会提供PowerController.GetPortStatus()的替代方法,比如额外的静态函数:

main

通过这种方式,您的用户可以通过基于1的方式访问此数据,这也将保留已编写的代码,从而提供向后兼容性。

答案 3 :(得分:0)

您必须与用户保持一致;你不能要求他们在这里使用0和在那里使用1。

无论你选择哪个都没关系,因为你应该有一个类和/或枚举你的不同状态。

使用类和枚举比布尔和索引更好,它更易读,而且更有趣。

或者,如果您真的想使用索引,请确定它是基于0还是1。根据他们的选择,将/ substract 1添加到每个索引,以使其适合您的系统。

他们想要一个基于1的索引,但你有一个布尔数组(我坚持不是超级好),你可以让他们使用他们的基于1的索引,每次使用时只需减去1,所以这是一个基于0的索引。 :)

许多解决方案都有效,最后一个非常容易。但我建议像我(以及可能还有其他人)提到的更深层次的重构。