可以/应该在ac#switch语句中抛出异常吗?

Hca*_*tek 9 c# exception throw switch-statement

我有一个返回int的插入查询.基于该int我可能希望抛出异常.这是否适合在switch语句中执行?

 switch (result)
        {

            case D_USER_NOT_FOUND:
                throw new ClientException(string.Format("D User Name: {0} , was not found.", dTbx.Text));
            case C_USER_NOT_FOUND:
                throw new ClientException(string.Format("C User Name: {0} , was not found.", cTbx.Text));
            case D_USER_ALREADY_MAPPED:
                throw new ClientException(string.Format("D User Name: {0} , is already mapped.", dTbx.Text));
            case C_USER_ALREADY_MAPPED:
                throw new ClientException(string.Format("C User Name: {0} , is already mapped.", cTbx.Text));
            default:

                break;
        }
Run Code Online (Sandbox Code Playgroud)

我通常会向交换机添加break语句,但它们不会被命中.这是一个糟糕的设计吗?请与我分享任何意见/建议.

谢谢,〜在圣地亚哥

Dan*_*den 12

为什么不?

来自C#编程语言,第三版.作者:Anders Hejlsberg等,第362页:

switch部分的语句列表通常以a break,goto casegoto default语句结尾,但允许呈现语句列表的端点不可达的任何构造.[...]同样,a throwreturn语句总是将控制转移到其他地方并且永远不会到达其终点.因此以下示例有效:

switch(i) {
case 0:
    while(true) F();
case 1:
    throw new ArgumentException();
case 2:
    return;
}
Run Code Online (Sandbox Code Playgroud)


Jus*_*ren 3

我不太同意你的变量命名约定;),但我不明白为什么你所做的事情是不合适的。这似乎是一种将错误从一种媒介转换为另一种媒介的相当优雅的方式。

我假设您的“插入查询”是某种形式的存储过程。