尝试使用插入的switch语句(如果不是)找出哪个值更大或更小

时间:2018-11-20 17:55:38

标签: c# if-statement switch-statement

我是学习C#(和任何编码语言)的初学者。 我正在尝试使用 switch 语句而不是 if

这是可行的if else语句

  private void RunScript(int a, int b, ref object A)
  {
    if (a < b)
    {
      Print("a is smaller than b");
      Print("b is bigger than a");
    }
    else if (a > b)
    {
      Print("a is bigger than b");
      Print("b is smaller than a");
    }
    else
    {
      Print("a equals b");
    }

这是我要尝试的开关

 private void RunScript(double a, double b, ref object A)
      {
        double whichIsBigger = a - b;
//below is the 58th line
        switch (whichIsBigger)
        {
          case whichIsBigger < 0:
            Print("a is bigger than b");
            break;
          case whichIsBigger > 0:
            Print("a is smaller than b");
            break;
          default:
            Print("a equals b");
            break;
        }

这给了我 错误(CS0151):开关表达式或大小写标签必须为bool,char,字符串,整数,枚举或相应的可为空类型(第58行)

仅供参考,我正在尝试使用Rhino公共库在Rhinoceros3d上进行此操作。

而且,我一直在尝试找到一个网站或论坛来学习c#。 问这样的问题。我到这里了。 我认为这类问题很基本,但我找不到 资源可以给我这个问题的答案。 我已经阅读了几篇文章,找不到类似的问题

如果有任何网站可以像聊天室之类的东西快速回答我的问题, 请让我知道。

3 个答案:

答案 0 :(得分:4)

基本上,您正在尝试在case语句中运行评估。您必须先进行评估,然后使用case语句中的值。

如果是true / false的情况,则不应使用switch。切换通常用于存在许多可能正确的选项时。例如,如果您有一个带有多个值的enum,并且想要为每个值做不同的事情(例如DayOfWeek.MondayDayOfWeek.Tuesday等)。出于确切的原因,您正在这里。

如果您确实需要,可以创建一个ABCompare.BiggerABCompare.SmallerABCompare.Equal之类的枚举,然后在其中创建switch,但这不会真的没有道理。

答案 1 :(得分:1)

switch语句的作用是将您传递的值与您提供的替代项列表进行比较。因此,您可以这样做:

switch (a < b)
{
    case true:
        // do some stuff
        break;
    case false:
        switch (a > b)
        {
            case true:
                // do other stuff
                break;
            case false:
                // do other other stuff
                break;
        }
        break;
 }

但是您无法在case语句中进行直接比较,因为它们已经在与您传递给原始switch的值进行比较。

此外,上述示例对于switch来说是一个糟糕的用例,因为使用if-else可以更好地处理它。如果您的目标是了解switch,我的建议是尝试根据其值将enum转换为其他类型:

public enum Color
{
    Red,
    Blue,
    Green,
}

public string ConvertToHexWithIfElse(Color myColor)
{
    if (myColor == Color.Red)
    {
        return "#FF0000";
    }
    else if (myColor == Color.Green)
    {
        return "#00FF00";
    }
    else if (myColor == Color.Blue)
    {
        return "#0000FF";
    }

    return string.Empty;
}

public string ConvertToHexWithSwitch(Color myColor)
{
    switch (myColor)
    {
        case Color.Red:
            return "#FF0000";
        case Color.Blue:
            return "#0000FF";
        case Color.Green:
            return "#00FF00";
        default:
            return string.Empty;
    }
}

请注意,即使示例在switch上也有较差的用法,因为枚举是仅用于显示用法的强制性设计。 IMHO开关没有实际用途:您可以使用字典,也可以使用if-else。

答案 2 :(得分:1)

在执行switch语句时,每个“ case”都不应该带有条件。 switch语句旨在“切换”值。例如,交换颜色!

Color c = (Color) (new Random()).Next(0, 3);
switch (c)
{
    //Value of "c" is red
    case Color.Red:
       Console.WriteLine("Red!");
       break;
    //Value of "c" is green
    case Color.Green:
       Console.WriteLine("Green!");
       break;
    //Value of "c" is blue
    case Color.Blue:
       Console.WriteLine("Blue!");   
       break;
    //"c" is not red, green, or blue, so we default our message to say the color is unknown!
    default:
       Console.WriteLine("The color is not known.");
       break;   
}

在每种“情况”下,我们都会查看“ c”是否为特定值,如果不是,则在switch语句中使用默认值来处理该情况。