приращение недоступно для цикла for в методе c # - PullRequest
0 голосов
/ 20 июня 2019

У меня есть этот недоступный код в этом for цикле

public IActionResult List(int id) {
    for (id = 0; id <= 1000; id++) {
        var fil = _repoFil.GetById(id).Result;
        var listafiliali = new List<FilialeVM>();

        foreach (var filiale in fil) {
            var filialeVM = _mapper.Map<FilialeVM>(fil);
            listafiliali.Add(filialeVM);
        }

        return View(listafiliali);
    }

    return View();
}

приращение id++ недоступно

Ответы [ 3 ]

1 голос
/ 20 июня 2019

У вас несколько проблем с вашим кодом:

  1. Вы игнорируете id пройдено: представьте, что я звоню List(1234), 1234 будет проигнорировано, а также 789 в List(789)
  2. Вы не зацикливаетесь над id, поскольку вы возвращаетесь после цикла 1st
  3. Вы никогда не достигнете return View(); кода: вы входите в цикл и возвращаетесь из него.

Полагаю, вы хотите что-то вроде этого:

  using System.Linq;

  ...

  public IActionResult List(int id) {
    // for given id we collect all corresponding FilialeVM items
    var listafiliali = _repoFil
      .GetById(id)                                // items correspond to given id
      .Result
      .Select(fil => _mapper.Map<FilialeVM>(fil)) // mapped to FilialeVM
      .ToList();                                  // organized as list

    // If we have any item in listafiliali, view them, otherwise use default View()
    return listafiliali.Any()
      ? View(listafiliali)
      : View();
  } 

Или, если вы не хотите, чтобы id передавался, а сканировал id = [0..1000] диапазон:

  public IActionResult List() {
    // for id in [0..1000] range we collect all corresponding FilialeVM items
    var listafiliali = Enumerable
      .Range(0, 1000 + 1)
      .SelectMany(id => _repoFil
         .GetById(id)                                 // items correspond to given id
         .Result
         .Select(fil => _mapper.Map<FilialeVM>(fil))) // mapped to FilialeVM
      .ToList();                                      // organized as list

    // If we have any item in listafiliali, view them, otherwise use default View()
    return listafiliali.Any()
      ? View(listafiliali)
      : View();
  } 
0 голосов
/ 20 июня 2019

верните свой вид ПОСЛЕ окончания цикла

public IActionResult List(int id) {
    var listafiliali = new List<FilialeVM>();

    for (id = 0; id <= 1000; id++) {
        var fil = _repoFil.GetById(id).Result;            
        foreach (var filiale in fil) {
            var filialeVM = _mapper.Map<FilialeVM>(fil);
            listafiliali.Add(filialeVM);
        }            
    }

    if(listafiliali.Count > 0)
       return View(listafiliali);

    return View();
}
0 голосов
/ 20 июня 2019

Он недоступен, потому что у вас есть строка: return View(listafiliali); в вашем цикле for.Метод возвращает и завершает свое выполнение в первой итерации цикла for, как только он достигает ранее упомянутого возврата.

...