0

文字列を構成するために配列の各行の各プロパティにアクセスできるように、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>
 <% } %>    

"アクション" :

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

ありがとう

4

2 に答える 2

1

リスト全体を、説明した形式の1つの刺し傷として返したいだけの場合は、これでうまくいくはずです。

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();
}
于 2013-01-09T07:29:49.877 に答える
0

コレクションを反復処理しながら、 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()拡張メソッドを使用できます。

于 2013-01-09T07:44:59.557 に答える