我是学习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#。 问这样的问题。我到这里了。 我认为这类问题很基本,但我找不到 资源可以给我这个问题的答案。 我已经阅读了几篇文章,找不到类似的问题
如果有任何网站可以像聊天室之类的东西快速回答我的问题, 请让我知道。
答案 0 :(得分:4)
基本上,您正在尝试在case
语句中运行评估。您必须先进行评估,然后使用case
语句中的值。
如果是true
/ false
的情况,则不应使用switch。切换通常用于存在许多可能正确的选项时。例如,如果您有一个带有多个值的enum
,并且想要为每个值做不同的事情(例如DayOfWeek.Monday
,DayOfWeek.Tuesday
等)。出于确切的原因,您正在这里。
如果您确实需要,可以创建一个ABCompare.Bigger
,ABCompare.Smaller
,ABCompare.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语句中使用默认值来处理该情况。