switch语句的case分支中的方法

本文关键字:方法 分支 case 语句 switch | 更新日期: 2023-09-27 18:23:36

有没有一种方法可以像我在这段代码中的分支一样直接使用一些方法?

string strLink = txtLink.Text;
switch(strLink)
{
     case strLink.StartsWith("www"):
          strLink = "http://www." + strLink.Substring(3);
          break;
     case !strLink.StartsWith("www"):
          strLink = "http://www." + strLink;
}

switch语句的case分支中的方法

没有,但您可以执行以下操作:

string strLink = txtLink.Text;
string firstThreeChars = strLink.Substring(0,3);
switch(firstThreeChars)
{
    case "www":
        strLink = "http://www." + strLink.Substring(3);
        break;
    default:
        strLink = "http://www." + strLink;
        break;
}

然而,在我看来,您的代码可能存在一些逻辑问题。如果txtLink.Text是www.google.com,会发生什么情况?你的输出不是http://www..google.com吗?

说了这么多,如果这是你仅有的两种情况,我会建议更像

string strLink = "google.com";
string newLink = "http://" + (strLink.StartsWith("www.") ? strLink : "www." + strLink);

否,switch语句的case部分中的表达式应该是编译时常数或default。这可以是常量、枚举值或包含上述内容的表达式。

不,不幸的是,switch语句的C#规范非常有限。您想要的可能是(可以说没有那么好的)if...else if语法。好的衡量标准是:

string strLink = txtLink.Text;
if (strLink.StartsWith("www"))
{
    strLink = "http://www." + strLink.Substring(3);
}
else //if(!strLink.StartsWith("www")) this line is, of course, not necessary
     //                               since it's implied by the else, but that's
     //                               what it would be otherwise
{
    strLink = "http://www." + strLink;
}

不能在切换条件块和case块之间使用不同的值类型。如果您只有两个案例,请使用if statement

    string strLink = txtLink.Text;
    if (strLink.StartsWith("www"))
    {
        strLink = "http://www." + strLink.Substring(3);
    }
    else
    {
        strLink = "http://www." + strLink;
    }