【问题标题】:C# - Break out of case if statementC# - 打破 case if 语句
【发布时间】:2021-04-30 01:00:58
【问题描述】:

我只是想知道在 C# 中打破 case if 语句最有效的方法是什么?

case UserA:
{
    if (ConfigurationHelper.GetValue("Environment") == "DEV")
    {
        //upload document for Dev env         
    }
    else if (ConfigurationHelper.GetValue("Environment") == "UAT")
    {
        //upload document for UAT env                            
    }

会是以下吗?还是有更好的方法来做到这一点?

case UserA:
{
    if (ConfigurationHelper.GetValue("Environment") == "DEV")
    {
        //upload document for Dev env 
        break;
    }
    else if (ConfigurationHelper.GetValue("Environment") == "UAT")
    {
        //upload document for UAT env   
        break;                         
    }

【问题讨论】:

  • 您不需要跳出 if 语句。它应该正常完成范围或写错了。这就是 elseelse if 的用途。
  • 添加到@Zer0 的评论中,您只需要“打破”循环(for、while、do-while)或每个 switch 案例。
  • break 之后 ifelse if 范围结束。和其他任何case 一样。
  • 请为您的ifelse 创建函数并使用return。这比这种结构更优雅。
  • 可能是X/Y-Problem,您的解决方案可以在这里找到:Why Switch/Case and not If/Else If?

标签: c#


【解决方案1】:

你不需要打破 if...else if 语句。 if...else if 块将只执行一个块,无论使用了多少块。

case UserA:
                        
         if (ConfigurationHelper.GetValue("Environment") == "DEV")
         {
              //upload document for Dev env 
         }                                  
         else if (ConfigurationHelper.GetValue("Environment") == "UAT")
         {
              //upload document for UAT env                         
         }
        break; //you can use break at the end of the if...else if blocks


您可以在循环、case 语句中使用 break。 这是switch case的结构。

switch(expression) 
{
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block
    break;
}

不能使用break的地方。[修改]

namespace Test
{
    class TestClass{         
        static void Main(string[] args)
        {
            int a=5;
            if(a==1)
            {
               //do something.
               //here break can't be used. actually, there's no need to use break. 
               //as only one block will be executed of the if...else if...else blocks
            }
            else
            {
               //do something
            }
        }
    }
}

【讨论】:

  • 最后一个例子:我很确定,无论如何编译器都会优化 if / else 。像这样的硬编码会导致实际上无法访问的代码。
【解决方案2】:

什么方法最有效

我不敢相信没有人提出最明显的解决方案。所以,让我来做吧。这就是在 C# 中使用零代码处理不同环境的方法:

  1. 创建一个名为appsettings.X.json 的文件,其中X 等于ASPNETCORE_ENVIRONMENT 环境变量的值。
  2. 在那里添加特定于环境的配置。
  3. 完成!您的 ConfigurationHelper 会自动从正确的文件中提取值。

当然,这种方法有一些限制(例如,您不能同时使用两种配置)。希望它对你有用。

【讨论】:

  • 虽然这是个好建议,但并不能真正回答问题。如果我们忽略细节而只回答“在哪里放置'break'?”这个问题。 ...但是无论如何+1,因为我认为这是OP应该做的。
【解决方案3】:
case UserA:
{
   switch(ConfigurationHelper.GetValue("Environment"))
   {
        case "DEV":
             //upload document for Dev env 
             break;
        case "UAT":
             //upload document for UAT env   
             break;
        default:
             break;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多