假设我有这个代码:
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
有相同的东西感觉是多余的,只是为了不同的是一个案例有链接而另一个案例没有。
或者有其他方法可以格式化此代码以改善冗余吗?
实际上有几种方法。
无论如何,第一步是定义方法:
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);