【问题标题】:Displaying a single output for a false result in a foreach loop with string array C# [duplicate]在带有字符串数组C#的foreach循环中显示错误结果的单个输出[重复]
【发布时间】:2021-03-04 19:14:52
【问题描述】:

如果这个问题已经得到解答,我深表歉意,我找不到我正在寻找的确切内容,或者简明扼要地把它放在一个句子中进行搜索。我自己几乎解决了这个问题,但无法弄清楚。我是编程新手,所以这对某人来说可能是一个简单的答案。

我有一个字符串数组,一个人可以在其中输入一个字母,并找到包含该字母的所有字符串并显示它们。我使用 foreach 循环实现了这一点。

我面临的问题是如果没有匹配,我只希望它输出一个“不匹配”字符串,而不是替换每个不匹配的字符串。

这是有问题的代码块:

           string letter = Console.ReadLine();
           
           string no = "No match";
        
           foreach(string x in words) 
           {
             if(x.Contains(letter))
             {
              Console.WriteLine(x);
             }
             else {
                 Console.WriteLine(no);
             }
           } 

【问题讨论】:

    标签: c# arrays string foreach


    【解决方案1】:

    您可以使用bool 来跟踪是否找到匹配项:

    string letter = Console.ReadLine();
       
    string no = "No match";
    
    bool foundMatch = false;
    
    foreach(string x in words) 
    {
        if(x.Contains(letter))
        {
            Console.WriteLine(x);
            foundMatch = true;
        }
    } 
    
    if(!foundMatch)
    {
        Console.WriteLine(no);
    }
    

    【讨论】:

    • foundMatch = true; break;
    【解决方案2】:

    不要在循环中输出到控制台,而是考虑将执行逻辑的代码与与用户交互的代码分开......即,将Console.WriteLine放在后面。

    IEnumerable<string> GetMatches(string[] words, string letter)
    {
        foreach(string x in words) 
        {
            if(x.Contains(letter)) yield return x;
        }
    }
    
    //Main program
    string letter = Console.ReadLine();
    var matches = GetMatches(words, letter).ToList();
    if (matches.Length == 0)
    {
        Console.WriteLine("No match.");
    }
    else
    {
        foreach (var match in matches) 
        {
            Console.WriteLine(match);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 2022-01-27
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多