Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象存储到列表并搜索它们_C#_List_Search_Textbox - Fatal编程技术网

C# 将对象存储到列表并搜索它们

C# 将对象存储到列表并搜索它们,c#,list,search,textbox,C#,List,Search,Textbox,我希望能够在列表中创建一系列对象,然后在该列表中搜索特定结果(可能有0、1或多个点击),然后在文本框中显示结果 这是我到目前为止所拥有的,但我似乎只能显示我输入的最后一个对象 public partial class OrganiserWindow : Form { public OrganiserWindow() { InitializeComponent(); } List<Album> AlbumList = new List&

我希望能够在列表中创建一系列对象,然后在该列表中搜索特定结果(可能有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; 
        }
    }
}
公共部分课程组织者Windows:表单
{
公共组织者INDOW()
{
初始化组件();
}
List AlbumList=新列表();
私有void createAlbum_单击(对象发送方,事件参数e)
{
添加(新专辑(albumBox.Text,artistBox.Text));
}
私有void searchAlbum\u单击(对象发送者,事件参数e)
{
var albumResult=来自AlbumList中的相册
其中album.AlbumName!=null/==albumBox.Text
选择新建{Name=album.AlbumName,Artist=album.ArtistName};
foreach(albumResult中的变量项)
{
albumResultBox.Text=String.Join(Environment.NewLine,item.Name+“”+item.Artist);
}
}
}
公开课相册
{
私有字符串名称;
私人字符串艺术家姓名;
公共相册(字符串相册、字符串艺术家)
{
相册名称=相册;
艺人名称=艺人;
}
公共字符串名称
{
得到
{ 
返回相册名称;
}
设置
{ 
albumName=值;
}
}
公共字符串艺术家姓名
{
得到
{ 
返回艺人姓名;
}
设置
{ 
艺人名称=价值;
}
}
}

您忘记使用
+=
而不是
=

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

在每次迭代中,您将覆盖文本框中的文本。你应该附加到它上面。 还有文本框。文本从不为空

此行永远不会添加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 };

你正在积累状态。字符串是不可变的,每次调用+=都会为每次迭代创建一个新的字符串对象。在您的情况下,这可能无关紧要,但作为一种形式,您应该这样做:

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

通过重写ToString()可以极大地提高代码的易读性

允许你写作

sb.AppendLine(item);

AppendLine隐式调用ToString,然后追加CRLF。

。。。1个字符。非常感谢!这是一个简单的答案。我不会走得那么完美,详情见下文。既然你喜欢它,为什么不把它标记为已接受呢?(单击勾号)这不提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。是的,它确实提供了答案。和我们接受的一样。而且它是在火车上写在电话上的,所以格式化文本有点困难。现在编辑它。耶..好的。。我在查看
低质量的帖子时发现了这篇帖子。当时只有一句话。所以我认为这是低质量的。
sb.AppendLine(item);