这是一个微小的函数,可以随机返回+1或-1
public static int PlusOrMinus()
{
int chance = MyRandom.Random.Next(0, 2);
switch (chance)
{
case 0:
return -1;
case 1:
return 1;
}
}
编译器告诉我并非所有代码路径都返回一个值。至于我担心其不可能有机会不是0或1。
您是否必须始终包含这样的switch语句的默认大小写以进行编译?
答案 0 :(得分:8)
这可能有点简单:
return chance == 0 ? -1: 1;
答案 1 :(得分:5)
编译器不运行您的代码。因此,编译器无法知道定义的整数永远不会超出0-1的范围。
因此,是的,您必须在return
之外提供默认值或switch
。
答案 2 :(得分:2)
为什么不生成0或1,然后将0转为-1?
var x = MyRandom.Random.Next(0, 2);
if (x == 0)
return -1;
return x;
或者更简洁:
return MyRandom.Random.Next(0, 2) == 0 ? -1 : 1;
更新要回答您的问题,不, 包含default
,您也可以这样做:
public static int PlusOrMinus()
{
int chance = MyRandom.Random.Next(0, 2);
switch (chance)
{
case 0:
return -1;
case 1:
return 1;
}
throw new InvalidOperationException("Unreachable code.");
}
但无论如何,编译器必须满足所有执行路径返回值或抛出异常,无论你是否知道其中一些路径永远不会真正执行。
答案 3 :(得分:1)
编译器无法猜测你上面做了什么。真的,你可以将重构代码变得更干净,更安全。像
这样的东西public static int PlusOrMinus()
{
int chance = MyRandom.Random.Next(0, 2);
return chance == 0 ? -1 : 1;
}