2016-11-19 10 views
0

だから私はあなたがプログラムを起動し、選択されたときに選択された項目の内容を取得するためにいくつかのライブラリ名を持っているリストボックスのセットアップを持っている。 ArrayListの中で私は、この文字列が表示されますので、私はこれを使用することを設定しているところ C#.IndexOf Arraylistは-1を返す

 string selectedItem = lstLibraries.SelectedItem.ToString(); 

は、私は知りたいと思いました。

Libraries tempLibrary = (Libraries)LibrariesAndBooks[index]; 

あなたがプログラムは、それがインデックスに配置されてエラーに達した際に撮影した下のスクリーンショットで見ることができるように[0]ない-1ですが、なぜでしょうか?

screenshot http://image.prntscr.com/image/4f8b31c2bc71419f9eff4cd98f34ef13.png

また、それが0であることをハードコーディングすることは、私が何をする必要があるかのオプションではないと私は愚かな間違いや私のコードをした場合、私は唯一の私にいるので、あなたはthatsの罰金を投げたくなります大学の初年度であり、何らかの理由で6番目の形式でコードを書いていないので、それが期待されます。

+1

'selectedItem'は' string'ですが、リストにはクラスのオブジェクトが含まれているようです。 'IndexOf'を使うことは、文字列と(文字列とオブジェクトのメンバとを比較することさえ知らない)何を比較すべきか分からないので、そのようには動作しません。 ](https://msdn.microsoft.com/en-us/library/7w3e62a8(v = vs.110).aspx)を参照してください。 – UnholySheep

答えて

0

IndexOfで実行できないライブラリオブジェクトのコレクションで文字列を検索しようとしています。コレクションを繰り返し処理し、各アイテムの名前をselectedItemに対してテストし、インデックスを自分で見つける必要があります。

このようなタスクをより簡単に行うために、再利用可能なメソッドを作成することも考えられます。ような何か:

public static int FindIndex(IList collection, Func<object, bool> predicate) 
    { 
     for (int i = 0; i < collection.Count; i++) 
      if (predicate(collection[i])) 
       return i; 

     return -1; 
    } 

この方法で、あなたは簡単なよう、今後この問題を解決することができます

int index = FindIndex(LibrariesAndBooks, (item) => ((Libraries)item).Name == selectedItem) 

簡単に、非再利用可能な方法は、次のようになります。

int index = -1; 
for (int i = 0; i < LibrariesAndBooks.Count; i++) 
{ 
    // Retrieve & soft cast - if it is a book, candidateLibrary will be null 
    Libaries candidateLibrary = LibrariesAndBooks[i] as Libraries; 
    if (candidateLibrary == null) 
     continue; 

    if (candidateLibrary.GetName() == selectedItem) 
    { 
     index = i; 
     break; 
    } 
} 

がんばろう!

+0

'lstLibrary.SelectedItem'が実際のオブジェクトを表していると仮定していますか? OPによると、 'LibrariesAndBooks'に格納されているオブジェクトの' name'メンバーのコピーだけを含むリストボックスです。 – UnholySheep

+0

私の間違いです。調整します。 – Daniel

+0

私が使用したコードを説明できるようにするために、上記のコードで何が起こっているのかを説明してもらえますか?貼り付けをコピーして動作させるだけではできません。 申し訳ありません私は痛みを感じていますが、私はそれが何をしているのかを調べるために各ビットを調べることができますが、私はこの特定のケースでは何をするのかもわからないと確信しています:/ – Aelux

関連する問題