【问题标题】:C# String Does Not Contain Text [closed]C# 字符串不包含文本 [关闭]
【发布时间】:2013-12-20 08:28:31
【问题描述】:

我在文本框中输入了一个类似于以下内容的短语:“taree 明天天气如何”

目前,此代码将 suburb 字符串设置为大写名称,并将 suburbID 设置为一个值。

public void requestedSuburb(String suburbFromForm1)
{
    suburb = suburbFromForm1;

    if (suburb.Contains("taree"))
    {
       suburb = "Taree";
       suburbID = "zmw:00000.1.95784.xml";
    }
    else if (suburb.Contains("port macquarie"))
    {
       suburb = "Port Macquarie";
       suburbID = "zmw:00000.1.94787.xml";
    }

(更多郊区名称在此点下方使用 else if 语句检查。

整个 InputTextbox.Text 被传递到 suburb 字符串中,用于检查上述内容。

我的问题是,是否有一个 else if 语句可以检查 suburb 字符串,如果没有找到郊区的文本,它可以默认选择吗? (即:我希望 'Taree' 成为默认设置。)

我目前拥有的是这个,但它没有返回任何东西:

else if (!suburb.Contains("taree") || (!suburb.Contains("port macquarie")))
{
   suburb = "Port Macquarie"
   suburbID = "zmw:00000.1.94787.xml";
}

【问题讨论】:

  • switch/case 声明?
  • 听起来像ComboBox 会更好。

标签: c# string contains


【解决方案1】:

您只需要在所有else-if 的末尾添加一个else,如下所示:

if (suburb.Contains("taree"))
{
   suburb = "Taree";
   suburbID = "zmw:00000.1.95784.xml";
}
else if (suburb.Contains("port macquarie"))
{
   suburb = "Port Macquarie";
   suburbID = "zmw:00000.1.94787.xml";
}
else {
  suburb = "default";
}

【讨论】:

  • 比我快 100 毫秒:P
  • @SimonWhitehead 只是因为我可能会先阅读这个问题 :)
  • 谢谢。这工作得很好,很好很简单。我整天都在玩代码,所以它在逃避我。
【解决方案2】:

你只想要else:

if (suburb.Contains("taree"))
{
   suburb = "Taree";
   suburbID = "zmw:00000.1.95784.xml";
}
else if (suburb.Contains("port macquarie"))
{
   suburb = "Port Macquarie";
   suburbID = "zmw:00000.1.94787.xml";
}
else
{
    // this fires if nothing else above is correct
    suburb = "Taree";
    suburbID = "zmw:00000.1.95784.xml";
}

【讨论】:

    【解决方案3】:

    使用else 处理默认设置,如下所示:

    if (suburb.Contains("taree"))
    { 
        suburb = "Taree";
        suburbID = "zmw:00000.1.95784.xml";
    }
    else if (suburb.Contains("port macquarie"))
    {
        suburb = "Port Macquarie";
        suburbID = "zmw:00000.1.94787.xml";
    }
    else
    {
        suburb = "Taree";
        suburbID = "zmw:00000.1.95784.xml";
    }
    

    您也可以只分配默认值开始,然后仅在找到匹配项时覆盖默认值,如下所示:

    // Default values
    suburb = "Taree";
    suburbID = "zmw:00000.1.95784.xml";
    
    if (suburb.Contains("port macquarie")
    {
        suburb = "Port Macquarie";
        suburbID = "zmw:00000.1.94787.xml";
    }
    

    注意:对于您发布的示例代码,这会将您的逻辑简化为单个 if。这也消除了第一个ifelse 中的重复逻辑。

    【讨论】:

    • 我认为第二种方法有一个正确的想法,但你必须稍微修改一下,我们必须先复制suburb(在分配它之前使用默认的"Taree"),使用那个副本在else if 中,如果条件为true,则更新suburb,这样我们就不需要最后一个else
    • 但是 OP 已经传入了一个名为 suburbFromForm1 的参数,因此我们可以在 else-if 中使用该权限,而无需复制郊区
    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2018-07-04
    • 2014-04-17
    • 2013-03-29
    • 2020-04-15
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多