2016-11-22 3 views
0

私はforeachループを壊す方法を知りたいと思っています。どこに出力されているのでしょうか?私の問題は、私が2番目の要素を停止するためにbreak文を使うときはいつも、最初の要素も表示されているということです。 2番目の要素だけを取得したい場合は、1番目の要素と2番目の要素が表示されます。 2番目の要素だけが表示されます。あなたは私のforeachループセクションでここに見ることができるようにforeachループのbreak文は、C#を使用して計画どおりに動作していませんか?

public partial class Pages_GuitarItemsIbanezDetails : System.Web.UI.Page 
{ 
    private string guitarBrandType = "Ibanez"; 
    private int x = 0; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    FillPage(); 
    } 

    public void FillPage() 
    { 
    ArrayList itemDetails = new ArrayList(); 


    if (!IsPostBack) 
    { 
     itemDetails = ConnectionClass.GetItems("%"); 
    } 
    else 
    { 
     itemDetails = ConnectionClass.GetItems(guitarBrandType); 
    } 

    StringBuilder sb = new StringBuilder(); 




     foreach (GuitarItems gList in itemDetails) 
     { 

      sb.Append(
       string.Format(
        @"<div class='guitarItemsDetailsWrapper'> 
         <div class='guitarItemsDetailsImage'> 
          <img runat='server' src='{3}' /> 
         </div> 

         <div class='guitarItemsDetailsStyle'> 
          <h2>Name: </h2><p>{0} {1}</p> 
          <br/> 
          <h2>Price: </h2><p>${2}</p> 
          <br/> 
          <h2>Description: </h2><p>{4}</p> 
          <br/> 
          <h2>Neck Type: </h2><p>{5}</p> 
          <br/> 
          <h2>Body: </h2><p>{6}</p> 
          <br/> 
          <h2>Fretboard: </h2><p>{7}</p> 
          <br/> 
          <h2>Bridge: </h2><p>{8}</p> 
          <br/> 
          <h2>Neck Pickup: </h2><p>{9}</p> 
          <br/> 
          <h2>Bridge Pickup: </h2><p>{10}</p> 
          <br/> 
          <h2>Hardware Color: </h2><p>{11}</p> 
          <br/> 
         </div> 
        </div>", gList.Type, gList.Model, gList.Price, gList.Image2, gList.Description, gList.NeckType, 
        gList.Body, gList.Fretboard, gList.Bridge, gList.NeckPickup, gList.BridgePickup, gList.HardwareColor)); 

     if (++x == 2) 
     { 
      break; 
     } 

     } 




    lblOutput.Text = sb.ToString(); 



} 
} 

が良いこれを説明するために、ここに私のコードです。私は3番目のループからif文を使用して2番目の要素を表示できるようにしましたが、代わりに1番目の要素と2番目の要素を表示します。あなたが2番目の要素だけを表示するのを助けてくれることを願っています。自由に編集し、より良いコードテクニックを提案してください。

+1

あなたが唯一の第二の要素をしたい場合は、次のような

var secondItem = itemDetails[1] 

または

using System.Linq; var queryItem = itemDetails.Where(i=>i.Type.Contains("something")).FirstOrDefault(); 

のような別のクエリを使用するように、あなたの場合にはこのような何かを試してみてください全く? –

+2

ループは、基本的にすべてのことに対して何かをします。ブレークはループを停止しますが、ループが実行したすべてが完了します。 indexerを使ってリストにアクセスします。たとえば 'itemDetails [1]'のようなものです。 – Sascha

+0

あなたはこれを行うために最も難しい(そして維持するのが難しい)方法をかなり選択しました。 –

答えて

1

(これは正しい方法ではありませんが)このようなものを試すことができます。 2でない場合はループを続行します(追加する前に)。インデックスで特定のアイテムを取得するにはちょうどforeachループを使用するためのソリューションひどかった上で、はい、この1

foreach (GuitarItems gList in itemDetails) 
     { 
     if (x != 2) 
     { 
      x++; 
      continue; 
     } 
      sb.Append(
       string.Format(
        @"<div class='guitarItemsDetailsWrapper'> 
         .... 
        </div>", gList.Type, gList.Model, gList.Price, gList.Image2, gList.Description, gList.NeckType, 
        gList.Body, gList.Fretboard, gList.Bridge, gList.NeckPickup, gList.BridgePickup, gList.HardwareColor)); 

     if (x == 2) 
     { 
      break; 
     } 
     x++; 
     } 

を確認してくださいが。問題が発生したことを指摘していたのですが、あなたのsb.Appendがループごとにトリガされます(ブレークする前に)。この問題を解決するには、sb.Appendコードの前にcontinueを使用して現在の繰り返しをスキップすることができます(このシナリオでは有効ではありません)。 最後に、インデックスに基づいて特定のアイテムを入手するには、上のコメント担当者の助言に従ってください。なぜループ -

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 

namespace Rextester 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var itemDetails = new List<Guitar>(){ 
       new Guitar("Electric", "KA123"), 
       new Guitar("Manual", "model2"), 
       new Guitar("Get this one", "main model") 
      }; 

      // only this one line code needed to get specific item by index 
      var gList = itemDetails[2];     

      Console.WriteLine("Type:{0}, Model:{1}", gList.Type, gList.Model); 
     } 

     public class Guitar 
     { 
      public Guitar(string type, string model) { 
       Type = type; 
       Model = model; 
      } 
      public string Type {get;set;} 
      public string Model {get;set;} 
     } 
    } 
} 
+0

私はこれを試みましたが、何も表示されません。 – BrunoEarth

+0

最後にうまくいきました。あなたはそれを行う正しい方法の例を作ってもいいですか? – BrunoEarth

+0

上記の例を追加しました。確認してください – RizkiDPrast

関連する問題