标签: switch-expression

C#如何使用带开关的枚举

我无法弄清楚如何将开关与枚举结合使用.你能告诉我我做错了什么,以及如何解决它?我必须使用枚举来制作一个基本的计算器.

public enum Operator
{
    PLUS, MINUS, MULTIPLY, DIVIDE
}

public double Calculate(int left, int right, Operator op)
{

    int i = (int) op;

    switch(i)
    {
        case 0:
        {
            return left + right;
        }

        case 1:
        {
            return left - right;
        }

        case 2:
        { 
            return left * right;
        }

        case 3:
        {
            return left / right;
        }

        default:
        {
            return 0.0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最终结果应该是这样的:

Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, PLUS))
Output: The …
Run Code Online (Sandbox Code Playgroud)

c# enums switch-statement switch-expression

64
推荐指数
3
解决办法
17万
查看次数

返回类型为 void 的 switch 表达式

当 switch 分支调用具有 void 返回类型的方法时,有没有办法强制对所有枚举值进行彻底检查?仅仅为了诱使编译器要求穷举而对产量进行硬编码是非常丑陋的。

这是我当前的模式(句柄方法具有 void 返回类型)

int unused = switch (event.getEventType()) {
    case ORDER   -> { handle((OrderEvent) event); yield 0; }
    case INVOICE -> { handle((InvoiceEvent) event); yield 0; }
    case PAYMENT -> { handle((PaymentEvent) event); yield 0; }
};
Run Code Online (Sandbox Code Playgroud)

我想使用表达式的原因是在添加新枚举值但未处理时出现编译错误。

java void switch-statement switch-expression java-16

30
推荐指数
3
解决办法
1625
查看次数

c#中的多变量开关语句

我想使用一个switch语句,它接受几个变量,如下所示:

switch (intVal1, strVal2, boolVal3)
{
   case 1, "hello", false:
      break;
   case 2, "world", false:
      break;
   case 2, "hello", false:

   etc ....
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在C#中做这样的事情?(出于显而易见的原因,我不想使用嵌套的switch语句).

.net c# logic switch-statement switch-expression

25
推荐指数
6
解决办法
3万
查看次数

C# 8 用于 void 方法的 switch 表达式

我知道C# 8 switch expression返回值或属性匹配的方法的语法。但是如果我们只需要打开一个字符串值并执行一个不返回任何内容(没有返回类型/void)的方法,那么我们该怎么做呢?我正在考虑某种形式的 Func 但不确定确切的语法。我知道我们可以用常规的 case 语句用旧的方式来做,但试图看看我们是否可以用新的语法实现同样的效果。

这是问题的例子

switch (stringvalue)
{
    case "Add": Add(); break;
    case "Subtract": Subtract(); break;
}
Run Code Online (Sandbox Code Playgroud)

可能是这样的:

stringvalue switch
{
    "Add" => Add(),
    "Subtract" => Subtract()
}
// but this complains that there needs to be assignment on left side for this
Run Code Online (Sandbox Code Playgroud)

这可能吗?

c# switch-statement c#-8.0 switch-expression

22
推荐指数
2
解决办法
5641
查看次数

什么是 switch 表达式,它们与 switch 语句有什么不同?

作为 Java SE 12 的一部分,引入了switch表达式,并且从 Java SE 14 开始,它们已经标准化。它们与switch陈述有何不同?

java switch-statement switch-expression java-14

19
推荐指数
3
解决办法
1178
查看次数

c# 8 switch 表达式:没有找到 switch 表达式的最佳类型

我在我的启动类(.net core 3.1)中添加了一个代码来返回基于参数的类型,我得到了编译时错误。

我在sharplab中创建了一个运行示例。如果 switch 表达式包含它运行良好的字符串或其他对象。

工作示例1:

var x = key switch
            {
                "myhandler1" => "something",
                "myhandler2" => "something else",
                _ => "default case"
            };
Run Code Online (Sandbox Code Playgroud)

工作示例2:

object obj =  s switch {
            "a" => new object(),
            "b" => new DateTime(),
            _ => throw new NotImplementedException()
        };
Run Code Online (Sandbox Code Playgroud)

错误示例:

interface IHandler { }
public class BaseHandler { }
public class MyHandler1: BaseHandler, IHandler { }
public class MyHandler2: BaseHandler, IHandler { }

class Program
{
    static void Main(string[] args) …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core c#-8.0 switch-expression

14
推荐指数
1
解决办法
4608
查看次数

结合返回和切换

我该如何结合returnswitch case陈述?

我想要类似的东西

return switch(a)
       {
          case 1:"lalala"
          case 2:"blalbla"
          case 3:"lolollo"
          default:"default" 
       };
Run Code Online (Sandbox Code Playgroud)

我知道这个解决方案

switch(a)
{
    case 1: return "lalala";
    case 2: return "blalbla";
    case 3: return "lolollo";
    default: return "default";
}
Run Code Online (Sandbox Code Playgroud)

但我想只使用return运营商.

c# switch-statement switch-expression

12
推荐指数
7
解决办法
5万
查看次数

switch 表达式中的多个语句:C# 8

Switch 表达式是在 C# 8 中引入的。代码库中有很多地方可以用这种新风格重写。

例如,我有一些代码,用于从字节流中解析数据包:

switch (command)
{
    case Command.C1:
        return new P1();
    case Command.C2:
        return new P2();
    default:
        stream.Position++;
        return null;
}
Run Code Online (Sandbox Code Playgroud)

问题是 - 它不能转换为像这样的 switch 表达式

return command switch
{
    Command.C1 => new P1(),
    Command.C3 => new P2(),
    _ => { stream.Position++; return null; }
};
Run Code Online (Sandbox Code Playgroud)

我想到的第一件事是使用 a Func<>,它编译:

return command switch
{
    Command.C1 => new P1(),
    Command.C3 => new P2(),
    _ => new Func<AbstractPacket>(() => { stream.Position++; return null; })()
};
Run Code Online (Sandbox Code Playgroud)

F# 已经允许在每个分支中包含多个语句的代码:

match command …
Run Code Online (Sandbox Code Playgroud)

c# c#-8.0 switch-expression

12
推荐指数
2
解决办法
3382
查看次数

为什么不完整的switch表达式编译成功

试用JDK/12 EarlyAccess Build 20,其中JEP-325 Switch Expressions已作为预览功能集成.表达式的示例代码(如在JEP中一样):

Scanner scanner = new Scanner(System.in);
Day day = Day.valueOf(scanner.next().toUpperCase());
int i = switch (day) {
    case MONDAY,TUESDAY, WEDNESDAY:
        break 0;
    default:
        System.out.println("Second half of the week");
        // ERROR! Group doesn't contain a break with value
};
Run Code Online (Sandbox Code Playgroud)

我试图按照上一个问题中所述的相同步骤,如何使用Maven编译JDK12预览功能并使用命令行执行上面的代码块:

java --enable-preview -jar target/jdk12-updates-1.0.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

有点像我的期望我得到以下错误:

Error: Unable to initialize main class
com.stackoverflow.nullpointer.expression.SwitchExpressionMustComplete
Caused by: java.lang.VerifyError: Bad local variable type Exception
Details:   Location:
    com/stackoverflow/nullpointer/expression/SwitchExpressionMustComplete.main([Ljava/lang/String;)V @66: iload   
Reason:
    Type top (current frame, locals[4]) …
Run Code Online (Sandbox Code Playgroud)

java javac java-12 preview-feature switch-expression

11
推荐指数
1
解决办法
523
查看次数

C#8.0开关表达式中的多种情况

在传统的C#开关中,我们有一个可以聚合多种情况的构造。如何在新的c#8.0 开关表达式中完成此操作

有多种情况的switch语句:

    switch (value)
    {
       case 1:
       case 2:
       case 3:
          //do some stuff
          break;
       case 4:
       case 5:
       case 6:
          //do some different stuff
          break;
       default:
           //default stuff
          break;
    }
Run Code Online (Sandbox Code Playgroud)

C#8开关表达式的示例:

var result = value switch  
{  
    1 => "Case 1",  
    2 => "Case 2",  
    3 => "Case 3",  
    4 => "Case 4",  
}; 
Run Code Online (Sandbox Code Playgroud)

c# switch-statement c#-8.0 switch-expression

9
推荐指数
2
解决办法
657
查看次数