在ArrayList中搜索项目

时间:2015-11-03 21:34:46

标签: c# arraylist

我初始化了以下可以迭代的书籍ArrayList:

public void InitializeArrayList()
{
    list.Add(new Books("Pride and Prejudice", "Jane Austen", "Romance", "1813"));
    list.Add(new Books("The Notebook", "Nicholas Sparks", "Romance", "1996"));
    list.Add(new Books("Carrie", "Stephen King", "Horror", "1974"));
    list.Add(new Books("The Shining", "Stephen King", "Horror", "1977"));
    list.Add(new Books("A Game of Thrones", "George R.R. Martin", "Fantasy", "1996"));
    list.Add(new Books("A Clash of Kings", "George R.R. Martin", "Fantasy", "1998"));
    list.Add(new Books("A Storm of Swords", "George R.R. Martin", "Fantasy", "2000"));
    list.Add(new Books("A Feast for Crows", "George R.R. Martin", "Fantasy", "2005"));
    list.Add(new Books("A Dance with Dragons", "George R.R. Martin", "Fantasy", "2011"));
    list.Add(new Books("Gone Girl", "Gillian Flynn", "Thriller", "2014"));
    list.Add(new Books("The Girl on the Train", "Paula Hawkins", "Thriller", "2015"));
    list.Add(new Books("The Hunger Games", "Suzanne Collins", "Science Fiction", "2008"));
    list.Add(new Books("Catching Fire", "Suzanne Collins", "Science Fiction", "2009"));
    list.Add(new Books("Mockingjay", "Suzanne Collins", "Science Fiction", "2010"));
    list.Add(new Books("Matilda", "Roald Dahl", "Children's Fiction", "1988"));
    list.Add(new Books("Charlie and the Chocolate Factory", "Roald Dahl", "Children's Fiction", "1964"));
    list.Add(new Books("Room", "Emma Donoghue", "Fiction", "2010"));
    list.Add(new Books("Holes", "Louis Sachar", "Fiction", "1998"));
    list.Add(new Books("About a Boy", "Nick Hornby", "Fiction", "1998"));
}

我想创建一个搜索按钮,这样我就可以输入一个书名,当我按下搜索时,它会将我发送到一个新表格,其中包含该书中包含的所有细节(标题,作者,流派) )。

这是我到目前为止的尝试:

private void button3_Click(object sender, EventArgs e)
{
    String match = textbox.Text;
    foreach (Object b in list)
    {
        Books book = (Books)b;
        if (book.Equals(match))
        {
            Form2 form = new Form2();
            form.Visible = true;
        }
    }
}

基本上,我想知道如何将其发送到包含所有这些细节的新表单?

4 个答案:

答案 0 :(得分:4)

另一种形式需要能够接受您的输入。您可以添加接受该属性的Form2属性,例如:

class Form2{ public Book book { get; set; } ...}

// then in form1:
Form2 form = new Form2();
form.book = book;
...

答案 1 :(得分:0)

我希望您的Book Class有三个属性Author,Title,Genre

private void button3_Click(object sender, EventArgs e)
    {
        String match = textbox.Text;
        foreach (Object b in list)
        {
            Books book = (Books)b;
            if (book.Author.Contains(match) || book.Title.Contains(match) || book.Genre.Contains(match))
            {
                Form2 form = new Form2();
               form.Book = book;
                form.Show();
            }
        }
    }

要传递搜索的详细信息,您可以在Form2中创建一个Book属性。

答案 2 :(得分:0)

private void button3_Click(object sender, EventArgs e)
{
String match = textbox.Text;
List<Books> mybookslist = new List<Books>();
foreach (Books b in list)
{
    if (book.Author.Contains(match) || book.Title.Contains(match) || book.Genre.Contains(match))

    {
        mybookslist.Add(b);
    }
}
//Navigation code here with your data(mybookslist)
}

现在mybookslist的所有图书都与搜索字词匹配。

答案 3 :(得分:0)

如果你想通过Initializing List<T>(){}List<Class>进行测试,你可以看到同样的效果。但是如果你能做Books我会建议你不要硬编码}意味着你的List<T>类,那么你只需要创建一个新的对象实例,并根据你的硬代码将该对象添加到List中,这将是一种初始化List<ClassObject>对象但创建{{{}的简单方法。 1}}将是一个更好的方法

var bookList = new List<object>()
{
    "Pride and Prejudice", "Jane Austen", "Romance", "1813",
    "The Notebook", "Nicholas Sparks", "Romance", "1996",
    "Carrie", "Stephen King", "Horror", "1974",
    "The Shining", "Stephen King", "Horror", "1977",
    "A Game of Thrones", "George R.R. Martin", "Fantasy", "1996",
    "A Clash of Kings", "George R.R. Martin", "Fantasy", "1998",
    "A Storm of Swords", "George R.R. Martin", "Fantasy", "2000",
    "A Feast for Crows", "George R.R. Martin", "Fantasy", "2005",
    "A Dance with Dragons", "George R.R. Martin", "Fantasy", "2011"//,
    //etc......, 
 };

String match = "A Feast for Crows";
var bookslist = new List<object>();
foreach (Object b in bookList)
{
    if (b.Equals(match))
    {
        bookslist.Add(b);
    }
}