在 Switch Case 中,是否可以将 case 中的“部分代码”组合在一起,但将它们的差异分开?

问题描述 投票:0回答:1

假设我有这个代码:

switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    for (int i = 3; i >= 0; i--)
    {
      Console.WriteLine(i);
    }
    break;
  case y:
  <a role="link" aria-disabled="true"> Disabled link </a>
  for (int i = 3; i >= 0; i--)
  {
    Console.WriteLine(i);
  }
  default:
    // code block
    break;
}

我想知道是否可以合并

case x
case y
中的部分代码。例如,它们都共享确切的
for-loop
代码。区别在于
case x
有一个带有超链接的
<a>
标签,而
case y
有一个已禁用的链接。

我问这个问题是因为两次

loop code
有相同的东西感觉是多余的,只是为了不同的是一个案例有链接而另一个案例没有。

或者有其他方法可以格式化此代码以改善冗余吗?

c# razor
1个回答
0
投票

实际上有几种方法。

无论如何,第一步是定义方法:

public static PrintToConsole()
{
    for (int i = 3; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
}

然后有多种方法可以使其变得更好,一种可能在某些情况下更适合,而另一种则在...其他情况下:)

方法1

使用

switch

中的方法即可
switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    PrintToConsole();
    break;
  case y:
    <a role="link" aria-disabled="true"> Disabled link </a>
    PrintToConsole();
    // I guess you missed it here!
    break;
  default:
    // code block
    break;
}

方法2

您可以将打印到控制台和检查是否打印到全新方法分开,因为当前的 switch 语句开始有点复杂(我们将调整

PrintToConsole
):

public static PrintToConsoleUnderCondition(string expression) // Not sure about the type
{
    // Not sure where x and y are defined, maybe you can pass them through method's parameters.
    if (expression != x && expression != y) return;
    for (int i = 3; i >= 0; i--)
    {
        Console.WriteLine(i);
    }
}

然后你可以简化整个事情:

switch(expression) 
{
  case x:
    <a href=https://www.w3schools.com>Visit W3Schools</a>
    break;
  case y:
    <a role="link" aria-disabled="true"> Disabled link </a>
    // I guess you missed it here!
    break;
  default:
    // code block
    break;
}

PrintToConsoleUnderCondition(expression);
© www.soinside.com 2019 - 2024. All rights reserved.