【问题标题】:Test for last iteration of for loop in c# [duplicate]在c#中测试for循环的最后一次迭代[重复]
【发布时间】:2018-12-30 14:00:16
【问题描述】:
   public string GetUpgradesPurchasedVal()
   {
        string upgradesPurchasedVals = "";
        for (int i = 0; i < upgradesPurchased.Count; i++) {
            if (i == upgradesPurchased.Count) {
                upgradesPurchasedVals += upgradesPurchased [upgradeNames[i]].ToString () + "$";
            } else {
                upgradesPurchasedVals += upgradesPurchased [upgradeNames[i]].ToString () + "|";
            }
        }
        return upgradesPurchasedVals;
    }

所以我在这里循环 Dictionary&lt;string,bool&gt; upgradesPurchased 并且我试图确保 for 循环是否在由行 if(i == upgradesPurchased.Count) 标记的最后一次迭代中我期望在这种情况下发生的是如果 @987654325 @ 等于字典中的项目数,然后字符串将在其末尾收到“$”而不是“|”但是似乎该行被完全忽略了

总结:我需要测试for 循环是否在最后一次迭代中,如果是,则应将“$”添加到字符串中,如果不是“|”应该添加到字符串中

【问题讨论】:

  • 使用 ` == Count - 1` 因为 Count 永远不会达到。

标签: c#


【解决方案1】:

循环条件是i &lt; upgradesPurchased.Count,所以很明显if (i == upgradesPurchased.Count) 中的条件永远不会为真。

由于迭代是从零开始的,所以最后一次迭代将具有i == upgradesPurchased.Count - 1

【讨论】:

    【解决方案2】:
    if(i == upgradesPurchased.Count - 1)
    

    【讨论】:

      【解决方案3】:

      所以你有一个这样的字典:

       Dictionary<string, bool> upgradesPurchased = new Dictionary<string, bool>() {
         {"Pentium 3", true},
         {"Core i9",   false},
         {"Abacus",    true},
       };
      

      你有一个清单

      List<string> upgradeNames = new List<string>() {
        {"Pentium 3", "Core i9", "Abacus"},
      };
      

      而你想获得

      true|false|true$ 
      

      这里有一个歧义什么我们应该如何循环);但是主要原则是相同的:让 .Net 为您完成工作 (String.Join)。如果您想遍历 dictionary(但请注意,字典中的对没有任何顺序):

      public string GetUpgradesPurchasedVal() {  
        return !upgradesPurchased.Any() 
          ? ""
          : string.Join("|", upgradesPurchased.Select(pair => pair.Value)) + "$";
      }
      

      如果您想遍历 列表(您当前的代码):

      public string GetUpgradesPurchasedVal() {  
        return !upgradesPurchased.Any() 
          ? ""
          : string.Join("|", upgradeNames.Select(name => upgradesPurchased[name])) + "$";
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-25
        • 2018-02-06
        • 2011-07-11
        • 2019-06-04
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        相关资源
        最近更新 更多