繁体   English   中英

如何使用带有 String.Contains 的 switch case?

[英]How to use switch case with String.Contains?

我想在下面的代码中使用switch case 这可能吗?如果可以,怎么做?

private IEnumerable<string> GetRowValues(DataRow dr)
{
    foreach (DataColumn col in DataResult.Columns)
        yield return replaceSpecialChar(dr[col].ToString());
}

private string replaceSpecialChar(string text)
{
    if (text.Contains("<"))
    {
        text = text.Replace("<", "&lt;");
    }
    else if (text.Contains(">"))
    {
        text = text.Replace(">", "&gt;");
    }
    else if (text.Contains("<=")){
        text = text.Replace("<=", "&le;");
    }
    else if (text.Contains(">="))
    {
        text = text.Replace(">=","&ge;");
    }
    return text;
}

快速的答案是,你不能使用switch来做你想做的事,你也不应该尝试。 在当前形式中,如果您的字符串包含多个符号,则只有它匹配的第一个将被替换。

您还需要注意执行这些操作的顺序,因为<=最终会成为&lt= 您还缺少"&lt""&gt"的尾随分号

您应该做的只是将多个调用链接到.Replace()

private string replaceSpecialChar(string text)
{
    return text
        .Replace("<=", "&le;")
        .Replace(">=", "&ge;")
        .Replace("<", "&lt;")
        .Replace(">", "&gt;");
}

正如一些人已经说过的那样:您不能将其更改为开关,因为您不能对案例使用函数,但较新的 C# 版本的一些简单条件除外。

除此之外,您的代码看起来像您想用 html 代码替换替换所有给定的特殊字符。 您的代码目前仅替换符合您的一个条件的第一个特殊字符,而不是全部。

如果您想用 html 代码替换所有给定字符,则不需要 if/else if 部件。 只需使用它:

return text.Replace("<=", "&le;")
    .Replace(">=", "&ge;")
    .Replace("<", "&lt;")
    .Replace(">", "&gt;");

*编辑似乎 phuzi 更快,并且还提到了替换角色的顺序;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM