Если или иначе логическая проблема в цикле, возврат недопустим в c#

#c# #loops #if-statement

#c# #циклы #if-оператор

Вопрос:

Мне нужна логика оператора if внутри цикла foreach, проблема, с которой я сталкиваюсь, заключается в том, что при чтении операторов if внутри цикла, когда мой цикл выполняет возврат, я получаю неправильные результаты.

цикл foreach считывает поступающие данные из списка, а затем принимает решение в цикле foreach на основе операторов if

метод возврата списка итак, здесь, в моем коде, например, если данные, поступающие для 5 записей и для установления, содержат 038, являются 4 записями и 1 записью для установления 088, когда я получаю возврат этих данных, я получаю 1 038, затем 088, затем снова 038, а затем 088 и так далее, и это не должно быть так, оно должно возвращать 4 038 и 1 088, поэтому возврат lotlist вернет строку, например, 111920-325, но проблема не в этом, проблема в том, что я наличие — это логика операторов if в цикле

 public List<string> ParseLot()
        {
            var lotList = new List<string>();
            var establishmentList = GetEstablishmentCode();

            foreach (var lot in GetBarcodeList())
            {
                if (establishmentList.Contains("038"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.LoganSport038Property);
                }
                if (establishmentList.Contains("072"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.LouisaCounty072Property);
                }
                if (establishmentList.Contains("086"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Madison086Property);
                }
                if (establishmentList.Contains("089"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Perry089Property);
                }
                if (establishmentList.Contains("069"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.StormLake069Property);
                }
                if (establishmentList.Contains("088"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Waterloo088Property);
                }
                if (establishmentList.Contains("265"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.GoodLetsVille265Property);
                }
                if (establishmentList.Contains("087"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.CouncilBluffs087Property);
                }
                if (establishmentList.Contains("064"))
                {
                    lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Sherman064Property);
                }

            }

            return lotList;
        }
  

вот класс lotstablishment

 public class LotEstablishment
{
    // private variable field (access modifiers)
    private const string LoganSport038 = "-244I";
    private const string LouisaCounty072 = "-244L";
    private const string Madison086 = "-244M";
    private const string Perry089 = "-244P";
    private const string StormLake069 = "-244";
    private const string Waterloo088 = "-244W";
    private const string GoodLetsVille265 = "-244G";
    private const string CouncilBluffs087 = "-244C";
    private const string Sherman064 = "-244S";

    // properties
    public string LoganSport038Property => LoganSport038;
    public string LouisaCounty072Property => LouisaCounty072;
    public string Madison086Property => Madison086;
    public string Perry089Property => Perry089;
    public string StormLake069Property => StormLake069;
    public string Waterloo088Property => Waterloo088;
    public string GoodLetsVille265Property => GoodLetsVille265;
    public string CouncilBluffs087Property => CouncilBluffs087;
    public string Sherman064Property => Sherman064;

}
  

вызов метода стабилизации партии

 public List<string> GetEstablishmentCode()
{
    var establishmentList = new List<string>();

    foreach (var establishmentCode in GetBarcodeList())
    {
        establishmentList.Add(establishmentCode.Substring(36, 3));
    }

    return establishmentList;
}
  

итак, опять же, конечный результат для возврата lostList должен основываться на операторах if внутри цикла foreach .

Я не смог найти никакого надежного решения в других вопросах в stackoverflow или Google.

Комментарии:

1. Попробуйте отладить .

2. В чем разница между GetBarcodeList методом, вызываемым в GetEstablishmentCode и вызываемым в foreach цикле?

3. Каждую итерацию вы проверяете на соответствие своему полному establishmentList (который не меняется), поэтому логично, что он запускает одни и те же if инструкции на каждой итерации.

4. Привет, @Sinatr, результатом lotList является строка стабилизация, например, 03142019-244I, если это установление содержит 038, если метод GetEstablishmentCode() имеет 038

5. Может быть, вы имели в виду писать if (lot.Contains(...)) в каждой ветке?

Ответ №1:

Как обсуждалось в комментариях, вы вызывали Contains() не тот объект. Следующее устраняет вашу проблему, вызывая Contains() on lot (текущую переменную в foreach цикле):

 public List<string> ParseLot()
    {
        var lotList = new List<string>();
        var establishmentList = GetEstablishmentCode();

        foreach (var lot in GetBarcodeList())
        {
            if (lot.Contains("038"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.LoganSport038Property);
            }
            if (lot.Contains("072"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.LouisaCounty072Property);
            }
            if (lot.Contains("086"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Madison086Property);
            }
            if (lot.Contains("089"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Perry089Property);
            }
            if (lot.Contains("069"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.StormLake069Property);
            }
            if (lot.Contains("088"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Waterloo088Property);
            }
            if (lot.Contains("265"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.GoodLetsVille265Property);
            }
            if (lot.Contains("087"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.CouncilBluffs087Property);
            }
            if (lot.Contains("064"))
            {
                lotList.Add(lot.Substring(28, 6)   _lotEstablishment.Sherman064Property);
            }

        }

        return lotList;
    }