2017-11-15 19 views
0

私は簡単なプログラムを作っていますが、私は簡単な質問に固執しています。 2つのリストをオブジェクトと比較し、そのオブジェクトを見つけ出し、そのオブジェクトに属するすべてのクラス要素を出力するにはどうすればよいですか?C#オブジェクトと2つのリストを比較する

List<Skaitytojas> MyObjectList = new List<Skaitytojas>(); 
List<Knyga> KnyguList = new List<Knyga>(); 

private void button2_Click(object sender, EventArgs e) 
    { 
     Reader reader = new Reader(); 

     reader._surname = Convert.ToString(textBox1.Text); 
     reader._id = Convert.ToInt32(textBox2.Text); 

     MyObjectList.Add(reader); 
     MessageBox.Show("you created new user"); 
    } 

private void button4_Click(object sender, EventArgs e) 
    { 
     Book new_book = new Book(); 

     new_book.book_id = Convert.ToInt32(textBox3.Text); 
     new_book.date1 = Convert.ToString(textBox4.Text); 
     new_book.date2 = Convert.ToString(textBox5.Text); 
     new_book.date3 = Convert.ToString(textBox6.Text); 
     new_book._id2 = Convert.ToInt32(textBox7.Text); 

     BookList.Add(new_book); 
     MessageBox.Show("you added new book!"); 
    } 

は、私はそのつもりは同じ番号で、new_book.id2でreader._id比較したい、と私はそれを見つけた場合、私はそれについてのすべての情報を印刷したい:書籍ID、日付1、日付2など しかし、私を私はリストが空のままで、この関数を実行しようとボタン

private void button3_Click(object sender, EventArgs e) 
    { 

     int x = Convert.ToInt32(textBox2.Text); 
     Metodai m = new Metodai(); 
     m.print_book(x, this.listBox1); 
    } 

public void print_book(int x, ListBox f) 
    { 
     List<Book> BookList = new List<Book>(); 
     foreach (var k in BookList) 
     { 
      if (x == k._id2) 
      { 
       f.Items.Add(x); 
      } 
     } 
    } 

通話機能、それにいただきました!間違っている:どのように行うのか分からない、私はそれをこの方法を試してみました?たぶん別の方法がありますか?手伝って頂けますか?

+1

データ型の基礎を学ぶことから始めます。テキストボックステキストを文字列に変換する理由はなく、日付は文字列ではありません。 *スコープ*について学ぶ* – Plutonix

+1

は、BooKlistという2つのものがあるようです。 1つはグローバルスコープで、もう1つは関数print_bookにあります。私はbooklist decalrationをprint_bookから取り除いて、それをグローバルスコープで使用する必要があると思います。 – pm100

答えて

1

ライン

foreach (var k in BookList) 

あなたはそれが何をループれる前の行にブックリストをインスタンス化してきました。

+0

私はbutton2_clickの前に宣言しました。そうでない場合は、そのコードを表示するのを忘れてしまいました。空白のリストボックスを取得します。 –

0

インスタンス変数と同じ名前の関数変数 'BookList'を作成しました。

これを修正するには2通りの方法があります。

// Fix #1 
public void print_book(int x, ListBox f) 
{ 
    //List<Book> BookList = new List<Book>(); // Comment this line 
    foreach (var k in BookList) 
    { 
     if (x == k._id2) 
     { 
      f.Items.Add(x); 
     } 
    } 
} 

// Fix #2 
public void print_book(int x, ListBox f) 
{ 
    List<Book> BookList = new List<Book>(); // 'BookList' has never been used 
    foreach (var k in this.BookList) // Add 'this' 
    { 
     if (x == k._id2) 
     { 
      f.Items.Add(x); 
     } 
    } 
} 
+0

前にbooklistを宣言しましたが、自分のコードを編集しましたが、空のリストボックスを取得しました.2つのリストを比較する方法はありますか? –

関連する問題