It feels like you're conflating the Identifier for the Channel
with its position within a ChannelSet
. The following is my visualisation of how your code/comments would look at the moment :
public sealed class ChannelSet
{
private Channel[] channels;
/// <summary>Retrieves the specified channel</summary>
/// <param name="channelId">The id of the channel to return</param>
Channel GetChannel(int channelId)
{
return channels[channelId-1];
}
}
It does feel like you've decided that because Channel
s within a ChannelSet
are identified by numbers that have an upper and lower bound they must be indexes and therefore as it's C#, 0 based. If the natural way to refer to each of the channels is by a number between 1 and X, refer to them by a number between 1 and X. Don't try and force them into being indexes.
If you really want to provide a way to access them by 0 based index (what benefit does this give your end user, or developers that consume the code?) then implement an IndexerIndexer:
public sealed class ChannelSet
{
private Channel[] channels;
/// <summary>Retrieves the specified channel</summary>
/// <param name="channelId">The id of the channel to return</param>
public Channel GetChannel(int channelId)
{
return channels[channelId-1];
}
/// <summary>Return the channel at the specified index</summary>
public Channel this[int index]
{
return channels[index];
}
}