C# 否则可以避免

C# 否则可以避免,c#,if-statement,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)

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

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]];
                }
            }
Dictionary nTrans=newdictionary();
nTrans.添加('I',1);
nTrans.添加('V',5);
nTrans.添加('X',10);
nTrans.添加('L',50);
nTrans.添加('C',100);
nTrans.添加('D',500);
nTrans.添加('M',1000);
字符串rNum=“XV”;
int-dNum=0;
对于(int i=0;i
但我不知道如何避免使用if-else语句:

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

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

Case语句可以提高可读性,也可以作为命令映射/字典,其中每个计算都存储在dictionary/map中并直接查找。

能否处理循环中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]];
for(int i=0;i

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

我想知道您是否应该在say Code Review SE上问这个问题?dNum=nTrans[rNum[I]]这是if中的代码,您正在检查
i
是否小于
rNum.Length-1
。它较短,但可读性较低。@Spectarion虽然您消除了显式的
if
,但您的源代码的圈复杂度与原始代码相同@米基德嗯,我从没听说过。所以基本上,三元运算符与if-else的性能相同。接得好。非常感谢你。我一定会读更多的。@Spectarion没问题。我使用nDepend(很棒),但是VS可以通过分析来实现。计算代码度量。这不仅使weeee更快(减少循环期间的条件检查),还降低了圈复杂度+1是的,但这与此有什么关系?