当超出固定数组的索引时如何在开始时实际重启

时间:2009-07-24 03:42:22

标签: c# arrays

要求:

返回日期的文件(记录)总数。 指定一个修饰符(单个字符A-Z 0-9)来表示计数。

的信息: 此修饰符以及日期/时间将用于在整个系统中跟踪文件。

当前解决方案:

[Test]
    public void FileIDModifierShouldReturn9()
    {
        var filecountfordate = 35;
        var chararray = new[]{
                               'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
                               , 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                               '9'
                           };

        var expected = "9";
        var actual = chararray[filecountfordate].ToString();

        Assert.AreEqual(expected, actual);
    }

问题: 当文件计数大于数组的索引时,显然会抛出异常。

第二次测试:

[Test]
    public void WhenFileIDModifierIsBiggerThanArrayArrayShouldStartOverAndReturnValue()
    {
        var filecountfordate = 71;
        var chararray = new[]{
                               'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
                               , 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                               '9'
                           };
        if (filecountfordate > 35)
        {
            filecountfordate = filecountfordate%36;
        }

        var expected = "9";
        var actual = chararray[filecountfordate].ToString();

        Assert.AreEqual(expected, actual);
    }

我的问题是我需要能够以实际方式在数组的开头重新启动,而没有无尽的“if”语句。它已经晚了,我的大脑已经死了,因此无法找到合理的解决方案。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

没有任何损失你总是可以使用超过36的文件计数模数

[Test]
public void WhenFileIDModifierIsBiggerThanArrayArrayShouldStartOverAndReturnVal()
{
    var filecountfordate = 71;
    var chararray = new[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
      'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 
      'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                           '9'
                       };

    filecountfordate = filecountfordate % chararray.Length;


    var expected = "9";
    var actual = chararray[filecountfordate].ToString();

    Assert.AreEqual(expected, actual);
}