簡體   English   中英

在c#方法的for循環中增加無法訪問

[英]increment unreachable in for loop in c# method

我在這個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++無法訪問

您的代碼有幾個問題

  1. 忽略id傳遞:想象我調用List(1234)1234List(789) 789將被忽略
  2. 由於您在第1st循環后返回,因此您不會循環遍歷id
  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();
  } 

這是無法訪問的,因為您有這一行: return View(listafiliali); 在你的 for 循環中。 一旦遇到前面提到的返回值,該方法就會返回並在第一次 for 循環迭代中終止其執行。

循環完成后返回您的視圖

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM