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