编写比较两个变量的多个if标签的最佳方法是什么

时间:2015-01-09 00:32:05

标签: c# if-statement

我是C#编码的初学者,我试图比较两个int变量(C#)。

void CompareNumber() {
    int oneNumber;
    int secondNumber;

    if (oneNumber > secondNumber)
        {
        DoSomething();
        }

    else if (oneNumber < secondnumber)
        {
        DoSomethingElse();
        }

    else if (oneNumber == secondnumber)
         {
         DoSomethingDifferent();
         }
}

虽然这确实有效,但它看起来有点混乱,特别是因为我多次以这种方式比较变量。有没有更简洁的方法来做到这一点,使它看起来更整洁? (除了省略大括号外)

4 个答案:

答案 0 :(得分:3)

你已经写好它的方式是最好的方法:)它绝对没有错。

然而,当你说“特别是因为我多次以这种方式比较变量”时,可能会有一些东西需要解决。理想情况下,您应该能够重复使用一次写入的内容。

答案 1 :(得分:1)

由于您要求提供一般方法,使语句看起来更整洁,请考虑conditional operator&#34;?:&#34;如果你正在分配一个值。它不能用于调用void函数,但是,例如,如果你想用CompareNumber()返回两个int值中的较高者,你可以这样做:

int CompareNumber(int first, int second)
{
    return first > second ? first : second;
}

不能说我看到任何简单的方法可以使您的示例代码更加优雅。如果您要实施三种不同的案例,则无法跳过任何内容。当然,我可以聪明的alec并简化你的功能(使用未初始化的变量也不会有错误):

void CompareNumber()
{
    DoSomething();
}

编辑:之前声明你不能用条件运算符调用函数,但我的意思是你不能调用void函数......它们必须返回一个值,否则你会得到一个编译器错误

答案 2 :(得分:1)

你可以使用三元运算符来缩短它,但你正确地做到了。

void CompareNumber(int first, int second) {

    (first > second)
        ? DoSomething()
        : (second > first)
            ? DoSomethingElse()
            : DoSomethingDifferent();
}

答案 3 :(得分:1)

您可以在delta的signum上使用switch

switch ( Math.Sign( Alpha - Beta ) )
{
case -1: // Alpha < Beta.
    // Do something.
    break;
case 0: // Alpha == Beta.
    // Do something.
    break;
case 1: // Alpha > Beta.
    // Do something.        
}

当然,您可以使用default中的switch子句来处理最终案例。