如果否则可以避免

时间:2017-08-14 00:10:35

标签: c# if-statement

这是一个完成的罗马到十进制数字转换器。

Dictionary<char,int> nTrans = new Dictionary<char,int>();
            nTrans.Add('I',1);
            nTrans.Add('V', 5);
            nTrans.Add('X', 10);
            nTrans.Add('L', 50);
            nTrans.Add('C', 100);
            nTrans.Add('D', 500);
            nTrans.Add('M', 1000);

            string rNum = "XV";
            int dNum = 0;

            for (int i = 0; i < rNum.Length; i++)
            {
                if (i < rNum.Length-1)
                {
                    if (nTrans[rNum[i]] < nTrans[rNum[i + 1]])
                    {
                        dNum -= nTrans[rNum[i]];
                    }
                    else
                    {
                        dNum += nTrans[rNum[i]];
                    }
                }
                else
                {
                    dNum += nTrans[rNum[i]];
                }
            }

但是我无法弄清楚如何逃避使用这个if-else语句:

if (i < rNum.Length-1)
{
//Code
}
else
{
dNum += nTrans[rNum[i]];
}

有什么建议我可以避免使用它吗?问题只是为了优化和提高我的编码技能!

2 个答案:

答案 0 :(得分:4)

你可以处理循环中0和rNum.Length - 1之间的所有内容,然后处理它之外的最后一个吗?

类似的东西:

for (int i = 0; i < rNum.Length - 1; i++)
{
// do regular stuff
}

if (rNum.Length != 0)
    dNum += nTrans[rNum[rNum.Length - 1]];

如果这是一个函数,你可以将rNum.Length == 0检查移动到顶部,如果为真则只返回0作为dNum。这样你就可以跳过所有额外的处理。

答案 1 :(得分:-3)

案例陈述可以提高可读性,或者也可以是命令图/字典,其中每个计算都存储在字典/地图中并直接查找。