【问题标题】:How to break the sequence when an item from the list is found?找到列表中的项目时如何打破顺序?
【发布时间】:2020-04-15 13:29:24
【问题描述】:

我的列表包含多个属性,例如 Make、Model 和 Color 以及许多其他属性,并且一个字符串包含上述三个提及的 concat 版本。例如,字符串包含“Maruti Suzuki Desire White”,其中“Maruti”是制造商,“Suzuki Desire”是型号,“White”是颜色,在列表中有许多品牌、型号和颜色可以找到完全匹配的。下面是我的示例代码

这是示例模型:

public class MakeModelColor()
{
  public string Make {get; set;}
  public string Model {get; set;}
  public string Color {get; set;}
}

这是一个示例代码:

string concatedString = "Maruti Suzuki Desire White"
MakeModelColor model = new MakeModelColor();
IList<MakeModelColor> list=  new List<MakeModelColor>();
list = GetMakeModelColor();

变量list 包含存储在数据库中的所有型号、品牌和颜色。

foreach (var itemMake in list)
{
  if(concatedString.Contains(itemMake.Make)) 
    model.Make = itemMake.Make;
}

foreach (var itemModel in list)
{
  if(concatedString.Contains(itemModel.Model)) 
    model.Model = itemModel.Model;
}

foreach (var itemColor in list)
{
  if(concatedString.Contains(itemColor.Color)) 
    model.Color = itemColor.Color;
}

以上只是澄清我的问题的示例代码。除此之外,如果任何条件满足,我想打破循环并立即停止迭代。 我不知道我是否能够正确解释这个问题,但希望你能理解,如果有比 foreach 更好的选择,也请说明。

【问题讨论】:

  • 你可以在 if 条件中使用break;

标签: c# performance linq foreach iteration


【解决方案1】:

在每个周期中使用break;

【讨论】:

    【解决方案2】:

    您不仅有如何退出循环的问题。 (这很容易,只需阅读一些有关该语言的基本书籍)但您也有一个问题,即在同一个列表上循环三次以检查类数据的不同部分。更好的方法应该是去除三个循环的方法

    MakeModelColor model = null;
    foreach (var element in list)
    {
        if(element.ToString() == concatedString)
        {
            model = element;
            break; // <= here break the loop and exit
        }
    }
    if(model != null)
    {
        Console.WriteLine("Found: " + model.ToString());
    }
    

    要让它工作,你需要在你的类中添加一个 ToString() 的覆盖并返回实例的字符串表示

    public class MakeModelColor()
    {
      public string Make {get; set;}
      public string Model {get; set;}
      public string Color {get; set;}
      public override string ToString()
      {
         return $"{this.Make} {this.Model} {this.Color}";
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果您不想使用中断,您可以将 foreach 循环更改为 for 循环,并将中断条件添加到如下内容:

      for (var i = 0; i < list.Count && model.Make == null; i++)
      {
        if(concatedString.Contains(itemMake.Make)) 
           model.Make = itemMake.Make;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-22
        • 2012-08-23
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2023-03-07
        • 2020-10-08
        • 1970-01-01
        相关资源
        最近更新 更多