我的顺序收集应该从索引0还是索引1开始?
我正在为具有多个通道的设备创建对象模型。客户和我之间使用的名词是Channel和ChannelSet。(“集合”在语义上不准确,因为它是有序的,而正确的集合不是。但这在不同的时间是个问题。) 我正在使用C#。这是一个用法示例ChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 一切都是花花公子。 但是,客户端不是程序员,它们绝对会被零索引混淆-第一个通道是它们的通道1。但是,为了与C#保持一致,我想将ChannelSet索引从零开始。 当我的开发团队和客户进行交互时,这肯定会导致他们之间的脱节。但更糟糕的是,在代码库中如何处理此问题的任何不一致都是潜在的问题。例如,这是一个UI屏幕,最终用户(根据1个索引进行思考)正在编辑频道13: 该Save按钮最终将产生一些代码。如果ChannelSet索引为1: channels.GetChannel(13).SomeProperty = newValue; // notice: 13 或如果它的索引为零: channels.GetChannel(12).SomeProperty = newValue; // notice: 12 我不确定如何处理。我觉得这是个好习惯,即使有序的,整数索引的事物列表(ChannelSet)与C#Universe中的所有其他数组和列表接口保持一致(通过零索引ChannelSet)。但是,然后,UI和后端之间的每一段代码都需要翻译(减1),我们都知道隐患和常见的一对一错误已经是多么的隐秘。 …