标签: switch-statement

什么是带有OR-ing的VB.NET select case语句逻辑?

我在我的case表达式中使用了Or语句.

即使我有一个在此范围内的值,它也找不到匹配项.为什么不?

示例代码:

Select Case 2
    Case 0
        ' Some logic

    Case 1
        ' Some other logic

    Case 2 Or 3
        Console.WriteLine("hit")

 End Select
Run Code Online (Sandbox Code Playgroud)

有了上面我会假设hit将打印,但事实并非如此.

vb.net syntax switch-statement

53
推荐指数
4
解决办法
7万
查看次数

C/C++:切换非整数

通常我需要根据非POD常量元素的值选择要做的事情,如下所示:

switch( str ) {
  case "foo": ...
  case "bar": ...
  default:    ...
}
Run Code Online (Sandbox Code Playgroud)

可悲的是switch只能用整数:error: switch quantity not an integer.

实现这样的事情最简单的方法是获得一系列ifs:

if( str == "foo" )      ...
else if( str == "bar" ) ...
else                    ...
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案看起来很脏并且应该花费O(n),其中n是案例数,而在最坏的情况下,使用二进制搜索,这段代码可能花费O(log n).

使用一些数据结构(如Maps)可以获得表示字符串的整数(O(log n)),然后使用O(1)switch,或者可以通过if在右边嵌套s 来实现静态二进制排序但是,这些黑客攻击还需要大量编码,使一切变得更加复杂和难以维护.

最好的方法是什么?(快速,干净,简单,正如switch声明所述)

c c++ switch-statement

53
推荐指数
5
解决办法
3万
查看次数

在switch语句中使用NSString

可以NSStringswitch声明中使用吗?

或者只是使用if/ else if

objective-c switch-statement nsstring

53
推荐指数
4
解决办法
5万
查看次数

C++强制编译时错误/警告在交换机中隐式掉落

switch 语句可能非常有用,但会导致程序员忘记break语句的常见错误:

switch(val) {
    case 0:
        foo();
        break;
    case 1:
        bar();
        // oops
    case 2:
        baz();
        break;
    default:
        roomba();
}
Run Code Online (Sandbox Code Playgroud)

你不会明显得到警告,因为有时明确需要通过.良好的编码风格建议在你的堕落是故意的时候发表评论,但有时这是不够的.

我很确定这个问题的答案是否定的,但是:如果你case不这样做,那么当前(或将来会提出)是否能够让编译器抛出错误(或者至少是警告!)至少有一种break;或某种效果// fallthru?使用switch语句有一个防御性编程选项会很好.

c++ compiler-warnings switch-statement

53
推荐指数
3
解决办法
1万
查看次数

在调用函数时切换"控制转移绕过初始化:"

当我尝试构建以下开关时,我得到"转移控制绕过初始化:"错误:

switch (retrycancel)
{
    case 4:    //The user pressed RETRY
        //Enumerate all visible windows and store handle and caption in "windows"
        std::vector<MainHandles::window_data> windows = MainHandles().enum_windows().get_results(); 
        break;

    case 2: 
        //code
}
Run Code Online (Sandbox Code Playgroud)

它与我调用枚举函数有关.如果不允许从交换机内调用函数,是否有针对此类问题的解决方法?

c++ function switch-statement

52
推荐指数
2
解决办法
6万
查看次数

如何使用ruby"case ... when"与不等式?

你能用ruby做到这一点吗?它似乎"错过"了不平等的案件

 case myvar
 when  myvar < -5
    do somethingA
 when -5..-3
    do special_something_XX
 when -2..-1
    do special_something_YY
 when myvar == 0
    do somethingB
 when myvar > 0
    go somethingC
 end
Run Code Online (Sandbox Code Playgroud)

ruby switch-statement

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

在C#中切换案例 - 预期是一个常量值

我的代码如下:

public static void Output<T>(IEnumerable<T> dataSource) where T : class
{   
    dataSourceName = (typeof(T).Name);
    switch (dataSourceName)
    {
        case (string)typeof(CustomerDetails).Name.ToString(); :
            var t = 123;
            break;
        default:
            Console.WriteLine("Test");
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.case语句给出了一个错误,说明了一个常量变量.请大家帮忙谢谢!

c# switch-statement

50
推荐指数
6
解决办法
13万
查看次数

在交换机中使用'转到'?

我已经看到了建议的编码标准Never use goto unless in a switch statement fall-through.

我不跟随.这个"例外"案件究竟是什么样的,这证明了一个goto

c# coding-style goto switch-statement

48
推荐指数
4
解决办法
4万
查看次数

得到一堆十字架初始化错误

我从下载的示例中获取了这段代码:

bool ChatServer::event(QEvent * event)
{
    if(event->type() == QEvent::User)
    {
        UserEvent * ue = static_cast<UserEvent *>(event);
        switch(ue->userType)
        {
            case CR::ErrorEvent:
            case CR::LogEvent:
            {   
                TraceEvent * te = static_cast<TraceEvent *>(ue);
                if(te->userType == CR::ErrorEvent)
                {
                    error(te->msg);
                }
                else
                {
                    log(te->msg);
                }
            }
                break;
            default:
                return false;
        }
    }
    else
    {
        return QTcpServer::event(event);
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

现在如果编译程序我得到这个错误:

g++ -c -pipe -O2 -Wall -W -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtNetwork -I/usr/local/include/qt4 -I. -I/usr/local/include/qt4 -I/usr/local/include -o chatserver.o chatserver.cpp
g++ -c -pipe -O2 …
Run Code Online (Sandbox Code Playgroud)

c++ initialization g++ switch-statement

48
推荐指数
2
解决办法
8万
查看次数

造成这种情况的原因是:无法从switch语句跳转到此case标签

这是一个switch语句,我收到错误:

        switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

            // show wait view here
            statusLabel.text = @"Processing...";
            break;

        case SKPaymentTransactionStatePurchased:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view and unlock iClooud Syncing
            statusLabel.text = @"Done!";

            NSError *error = nil;
            [SFHFKeychainUtils storeUsername:@"IAPNoob01" andPassword:@"whatever" forServiceName: kStoredData updateExisting:YES error:&error];

            // apply purchase action  - hide lock overlay and
            [oStockLock setBackgroundImage:nil forState:UIControlStateNormal];

            // do other thing to enable the features

            break;

        case SKPaymentTransactionStateRestored:

            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

            // remove wait view here
            statusLabel.text = @"";
            break;

        case SKPaymentTransactionStateFailed:

            if …
Run Code Online (Sandbox Code Playgroud)

objective-c switch-statement ios9

48
推荐指数
1
解决办法
3万
查看次数