使用"foreach"或“;for"循环结构

本文关键字:quot 循环 结构 for foreach 使用 | 更新日期: 2023-09-27 17:51:07

我需要使用一个for循环,我认为这样我就可以访问数组中每一行的每个属性来组成我的字符串。

  public static string GetHintText(this IEnumerable<UserTrainingPointsDataModel> HintTextString)
  {
    foreach (var part in HintTextString)
    {
      HintText = HintText + "  " + part.Name + "  " + part.IncentiveTrainingModuleOptionName + " = " + part.Points;
    }
    return HintText;
  }
  public class UserTrainingPointsDataModel
  {
    public virtual int InteractionType { get; set; }
    public virtual int Points { get; set; }
    public virtual string Name { get; set; }
    public virtual string IncentiveTrainingModuleOptionName { get; set; }
  }

每行包含值:

  China Incentive Program  Points For Completing = 50  
  India - Q2 Incentive   Points Per Correct Answer = 50  
  China - Q2 Incentive  Points For Completing = 50  
  India Incentive Program  Points Per Correct Answer = 100  
  India - Q2 Incentive   Points Per Correct Answer = 100

HintTextString包含5行,每一行都有上面的属性,我需要组成一个字符串,看起来像这样:

  "Incentive Program: " + part.Name[0] + "  " + part.IncentiveTrainingModuleOptionName[0] + " + " + part.Points[0] + 
  "Incentive Program: " + part.Name[1] + "  " + part.IncentiveTrainingModuleOptionName[1] + " + " + part.Points[1]

等。所以我需要一个for循环?如何获得HintTextString的长度?智能感知并没有给我那个属性

视图:

 <% if (module.HasAssessment)
 { %>
    <div class="<%: moduleStateClass %>">&nbsp;</div>
    <div class="<%: moduleScoreClass %>"><%: module.ModuleScore %></div>
    <% var HintText =  TrainingModuleProgressStateDataModelExtentions.GetHintText(module.UserTrainingPoints); %>
    <script type="text/javascript">
       <%: Html.GetQTip("training-module-id-" + module.TrainingModuleId , "Incentive program: " + HintText , "training-module-id-" + module.TrainingModuleId , Zinc.Web.Extensions.QTipPosition.Bottom, true, "Module Points") %>
    </script> 
 <% }  %> 
 <% else
    {  %>
 <% var HintText =  TrainingModuleProgressStateDataModelExtentions.GetHintText(module.UserTrainingPoints); %>
 <script type="text/javascript">
    <%: Html.GetQTip("training-module-id-" + module.TrainingModuleId , "Incentive program: "  + HintText ,"training-module-id-" + module.TrainingModuleId , Zinc.Web.Extensions.QTipPosition.Bottom, true, "Module Points") %>   
 </script>
 <% } %>    

"Action":

  <div class="module-column-content">
    <% Html.RenderPartial("~/Areas/Training/Views/Home/Details.ascx", Model); %>
  </div>

谢谢

使用"foreach"或“;for"循环结构

如果您只是想以您描述的格式返回整个列表作为一个字符串,这应该可以工作

public static string GetHintText(this IEnumerable<UserTrainingPointsDataModel> HintTextString)
{
    string returnValue = string.Empty;
    foreach (var dataModel in HintTextString)
    {
        returnValue += string.Format("Incentive Program: {0}  {1} + {2}  ", dataModel.Name, dataModel.IncentiveTrainingModuleOptionName, dataModel.Points);
    }
    return returnValue;
}

Jared所述,如果您的集合很大,您可能希望使用StringBuilder,因为它在性能上要好得多。

public static string GetHintText(this IEnumerable<UserTrainingPointsDataModel> HintTextString)
{
    var returnValue = new StringBuilder();
    foreach (var dataModel in HintTextString)
    {
        returnValue.AppendFormat("Incentive Program: {0}  {1} + {2}  ", dataModel.Name, dataModel.IncentiveTrainingModuleOptionName, dataModel.Points);
    }
    return returnValue.ToString();
}

使用StringBuilder来构造文本,同时在集合上迭代。它被优化为与字符串操作函数一起工作。如果在循环中使用简单的文本添加(+=),则性能会变得非常糟糕。

public static string GetHintText(this IEnumerable<UserTrainingPointsDataModel> HintTextString)
{
  //format for each item 
  //{Name} {ModuleName} = {Points} <NewLine>
  string lineFormat = "Incentive Program: {0} {1} = {2}'r'n";
  StringBuilder sb = new StringBuilder();
  foreach (var part in HintTextString)
  {
     sb.AppendFormat(lineFormat, part.Name, part.IncentiveTrainingModuleOptionName, part.Points);
  }
  return sb.ToString();
}

另外,如果您需要HintTextString集合的长度,您可以使用IEnumerable.Count()扩展方法。