2013-04-09 90 views
0

我希望能夠在列表中創建一系列對象,然後在該列表中搜索特定結果(可能有0,1或多個匹配),然後顯示結果放在一個文本框中。將對象存儲到列表中並搜索它們

這是我到目前爲止,但我似乎只能顯示我輸入的最後一個對象。

public partial class OrganiserWindow : Form 
{ 
    public OrganiserWindow() 
    { 
     InitializeComponent(); 
    } 

    List<Album> AlbumList = new List<Album>(); 

    private void createAlbum_Click(object sender, EventArgs e) 
    { 
     AlbumList.Add(new Album(albumBox.Text, artistBox.Text)); 
    } 

    private void searchAlbum_Click(object sender, EventArgs e) 
    { 
     var albumResult = from album in AlbumList 
          where album.AlbumName != null// == albumBox.Text 
          select new { Name = album.AlbumName, Artist = album.ArtistName }; 

     foreach (var item in albumResult) 
     { 
      albumResultBox.Text = String.Join(Environment.NewLine, item.Name + " " + item.Artist); 
     } 
    } 
} 

public class Album 
{ 
    private string albumName; 
    private string artistName; 

    public Album(string album, string artist) 
    { 
     albumName = album; 
     artistName = artist; 
    } 

    public string AlbumName 
    { 
     get 
     { 
      return albumName; 
     } 
     set 
     { 
      albumName = value; 
     } 
    } 

    public string ArtistName 
    { 
     get 
     { 
      return artistName; 
     } 
     set 
     { 
      artistName = value; 
     } 
    } 
} 

回答

2

你忘了使用+=代替=

albumResultBox.Text += String.Join(Environment.NewLine, item.Name + " " + item.Artist); 
+0

... 1個字符。非常非常感謝你! – mansonitefirefox 2013-04-09 05:45:30

+0

誰投下了這個?這是完美的答案。 – mansonitefirefox 2013-04-09 05:46:36

+0

這是一個簡單的答案。我不會那麼完美,詳情請看下文。既然你喜歡它,爲什麼不把它標爲接受? (請點擊打勾) – 2013-04-09 05:58:34

0

在每次覆蓋在文本框中的文本迭代。你應該追加它。 另外TextBox.Text永遠不爲null。

這條線將永遠不會添加專輯王氏ALBUMNAME == NULL

AlbumList.Add(new Album(albumBox.Text, artistBox.Text)); 

所以你總是在運行此查詢

var albumResult = from album in AlbumList 
        where album.AlbumName != null 
        select new { Name = album.AlbumName, Artist = album.ArtistName }; 
+0

這不會提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Renjith 2013-04-09 06:13:08

+0

是的,它提供了一個答案。與接受的一樣。另外它在火車上寫在手機上,所以格式化文本有點困難。現在編輯它。 – 2013-04-09 06:30:36

+0

ya..okie ..我在回顧'低質量帖子'時遇到這篇文章。那時它只包含一句話。所以我認爲這是低質量。 – Renjith 2013-04-09 09:50:59

0

你正在積累狀態恢復的所有專輯。字符串是不可變的,每次調用+ =都會爲每次迭代創建一個新的字符串對象。在你的情況下,它可能不會重要,但作爲形式的問題,你應該做這樣的:

StringBuilder sb = new StringBuilder(); 
... 
sb.AppendFormat("{0} {1}\r\n", item.AlbumName, item.ArtistName); 

然後從sb.ToString()

提取成品​​串您可以通過大大提高你的代碼的legibiity壓倒一切的ToString()

public class Album 
{ 
    public Album(string album, string artist) 
    { 
     albumName = album; 
     artistName = artist; 
    } 

    public string AlbumName { get; set; } 
    public string ArtistName { get; set; } 

    public override string ToString() 
    { 
     return string.Format("{0} {1}", AlbumName, ArtistName); 
    } 
} 

讓你寫

sb.AppendLine(item); 

AppendLine隱式調用ToString,然後追加CRLF。

相關問題