相关疑难解决方法(0)

为什么switch语句而不是if-else?

我一直想知道这件事已经有一段时间了.我到目前为止还不是一个核心程序员,主要是小型Python脚本,我写了几个分子动力学模拟.对于真正的问题:switch语句有什么意义?你为什么不能只使用if-else语句

感谢您的回答,如果之前有人询问过,请指向我的链接.

编辑

S.Lott指出,这可能是问题If/Else vs. Switch的重复.如果你想关闭然后这样做.我将把它留待进一步讨论.

language-agnostic if-statement switch-statement

60
推荐指数
5
解决办法
8万
查看次数

你会如何尽可能快地制作这个切换声明?

2009-12-04更新:有关在此处发布的一些建议的分析结果,请参阅下文!


问题

考虑以下非常无害,非常简单的方法,它使用switch语句返回定义的枚举值:

public static MarketDataExchange GetMarketDataExchange(string ActivCode) {
    if (ActivCode == null) return MarketDataExchange.NONE;

    switch (ActivCode) {
        case "": return MarketDataExchange.NBBO;
        case "A": return MarketDataExchange.AMEX;
        case "B": return MarketDataExchange.BSE;
        case "BT": return MarketDataExchange.BATS;
        case "C": return MarketDataExchange.NSE;
        case "MW": return MarketDataExchange.CHX;
        case "N": return MarketDataExchange.NYSE;
        case "PA": return MarketDataExchange.ARCA;
        case "Q": return MarketDataExchange.NASDAQ;
        case "QD": return MarketDataExchange.NASDAQ_ADF;
        case "W": return MarketDataExchange.CBOE;
        case "X": return MarketDataExchange.PHLX;
        case "Y": return MarketDataExchange.DIRECTEDGE;
    }

    return MarketDataExchange.NONE;
}
Run Code Online (Sandbox Code Playgroud)

我和我的同事今天就如何更快地实现这个方法的几个想法进行了斗争,并且我们想出了一些有趣的修改,实际上相当显着地提高了它的性能(当然,按比例说).我有兴趣知道那里的其他人可以想到哪种优化可能没有发生在我们身上.

接下来,让我简单地提供一个快速免责声明:这是为了好玩 …

c# optimization switch-statement

33
推荐指数
6
解决办法
4531
查看次数

"switch"语句评估线程安全吗?

请考虑以下示例代码:

class MyClass
{
    public long x;

    public void DoWork()
    {
        switch (x)
        {
            case 0xFF00000000L:
                // do whatever...
                break;

            case 0xFFL:
                // do whatever...
                break;

            default:
                //notify that something going wrong
                throw new Exception();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

忘掉片段的无用性:我的疑问是关于switch声明的行为.

假设该x字段只能有两个值:0xFF00000000L0xFFL.上面的开关不应该属于"默认"选项.

现在想象一个线程正在执行"x"等于0xFFL的开关,因此第一个条件将不匹配.同时,另一个线程将"x"变量修改为0xFF00000000L.我们知道64位操作不是原子操作,因此变量首先将较低的dword置零,然后将较低的dword置零(反之亦然).

如果在"x"为零时(即在新的分配期间)完成开关中的第二个条件,我们是否会陷入不希望的"默认"情况?

c# thread-safety switch-statement atomicity

25
推荐指数
2
解决办法
2107
查看次数

30个左右的条件是一个开关声明吗?

我正处于在.Net中创建MP4标记解析器的最后阶段.对于那些有标记音乐经验的人,您会发现平均有30个左右的标签.如果测试了不同类型的循环,似乎带有Const值的switch语句似乎是关于以二进制方式捕获标记的方法.

这个开关允许我搜索二进制文件,而不需要知道标签的存储顺序,或者是否有一些不存在,但我想知道是否有人会反对使用switch语句来处理这么多条件.

任何见解都非常感谢.

编辑:有人认为我现在应该补充说,在讨论这个函数是递归的时候,我应该提取这个条件并将数据传递给我可以杀死的方法吗?

c# parsing

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

Switch(Case)总是错的吗?

是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......

language-agnostic design-patterns switch-statement

11
推荐指数
4
解决办法
3686
查看次数

更好:切换案例或if-else?

可能重复:
If/Else vs. Switch

我这里有两个代码,我只想问两个中哪一个在可写性(编写代码的简易性)和可读性(易于理解代码)方面更好.

切换情况:

import java.io.*;

public class Quarter{
    public static void main(String[] args){
        int day;
        String input="";

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("Input a number from 1 to 3: ");

        try{
            input=in.readLine();
        }catch(IOException e){
            System.out.println("Error!");
        }
        day=Integer.parseInt(input);

        switch(day){
            case 1:
            case 2:
            case 3:
                System.out.println("1st Quarter");
                break;
            case 4:
            case 5:
            case 6:
                System.out.println("2nd Quarter");
                break;
            case 7:
            case 8:
            case 9:
            System.out.println("3rd Quarter");
            break;
            case 10:
            case 11:
            case 12:
                System.out.println("4th Quarter");
                break;
            default: System.out.println("Error!"); …
Run Code Online (Sandbox Code Playgroud)

java if-statement switch-statement

10
推荐指数
1
解决办法
9171
查看次数

为什么使用switch语句而不是if else语句?

开关似乎没那么无用,因为它们可以用if-else语句替换,它可以做的不仅仅是匹配一个char/int/enum等.我只能想到一个很好用于一个开关,那将是解释命令线args.

switch语句有哪些实际用途?

language-agnostic switch-statement

9
推荐指数
5
解决办法
985
查看次数

7
推荐指数
1
解决办法
6036
查看次数

Dart switch 语句 - Case 表达式必须是常量

我针对其他语言查看了一些与此相关的问题,有些建议使用,final但这似乎不适用于 Dart。

我正在传递参数,所以 switch 语句肯定不能只包含常量吗?switch语句,如果一个很像语句问,如果它是或not..ie它是未知的,所以我看不出他们是否有是常数switch语句可能是有用的......?

  setCategory(arga, argb) {
    int result;
    switch (true) {
      case (arga >= 0 && arga < 3 && argb < 35):
        result = 16;
        break;
      case (arga >= 0 && arga < 3 && argb >= 35):
        result = 15;
        break;
        etc
Run Code Online (Sandbox Code Playgroud)

它返回Case expressions must be constant有关 case 表达式中 arga 和 argb 值的错误。解决此问题的最佳方法是什么,还是必须使用 if 语句?

switch-statement dart flutter

7
推荐指数
2
解决办法
9006
查看次数

switch语句如何执行?

我正在逐步完成两个不同的代码块,以了解switch语句和语句之间的执行差异if.

虽然if似乎检查每一个条件,但switch似乎直接跳到评估为true的条件.在预检之前,编译器如何知道哪个语句将评估为true?请看下面的代码:

public void IFvSwitch()
    {
        string x = "f";
        switch (x)  // Compiler skips directly to case "f":
        {
            case "a":
                MessageBox.Show(x);
                break;
            case "b":
                MessageBox.Show(x);
                break;
            case "f":
                MessageBox.Show(x);
                break;
        }

        if (x == "a") // Compiler checks all conditions 
        {
            MessageBox.Show(x);
        }
        else if (x == "b")
        {
            MessageBox.Show(x);
        }
        else if (x == "f")
        {
            MessageBox.Show(x);
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net c#

6
推荐指数
1
解决办法
756
查看次数