2016-03-27 8 views
1

だから、後にインストールして、サービスの前に、私はサービスが含まれている2つのリストビューを、比較しようとしています - 私はそうは、C#で新しいリストビューに2つのリストビューと出力を比較しようとすると

serviceinfo si = new serviceinfo(); 
     for (int i = 0; i < listView2.Items.Count; i++) 
     { 
      string testing = listView1.Items[i].Text; 
      //MessageBox.Show(testing); 
      ListViewItem item = listView2.FindItemWithText(testing); 
      //MessageBox.Show(item.ToString()); 
      if (item == null) 
      { 
       //MessageBox.Show("Test"); 
       si.name = item.Text; 
       listView3.Items.Add(si.name); 
      } 
      else 
      { 
       //MessageBox.Show("Item exists"); 
      } 
     } 
を行うには、以下の方法を使用して試してみました

"item == null"を "!="に変更すると、これはすべての等しいアイテムを出力しますが、 "=="のときは、 "Object not referenced error" .nameをヌルオブジェクトにするのですが、テキストが必要です。

これについてのご支援をいただければ幸いです。

+0

どのように価値が存在しないものに値を設定すると思いますか? 「FindItemWithText」が条件を満たした項目がないため、nullが返されました。 – petric

+0

私はそれがその1つだと思っています。私はそれを見ていました。私は木の森を見ることができませんでした。答えを見て、私は明らかに以下のようにマークしました。 "not" item.text "それは本質的に" null.text "となるでしょう。 – badatseesharp

答えて

0

おそらく、このようなものを使用する必要があります。コード内のコメントはロジックを説明しています。

// Loop over the items in the first list.... 
for (int i = 0; i < listView1.Items.Count; i++) 
{ 
    // Get the text of the item at i pos in the first listview 
    string testing = listView1.Items[i].Text; 

    // Search it in the second listview 
    ListViewItem item = listView2.FindItemWithText(testing); 

    // If not found... 
    if (item == null) 
    { 
     // Add the text to the third listview 
     listView3.Items.Add(testing); 
    } 
    else 
    { 
     MessageBox.Show("Item exists"); 
    } 
} 

注:私はあなたが最新のコード上で、この文脈では、いくつかの新しいサービスを追加したインストールした場合を発見したいとは、最初のListViewが AFTERサービスのリストインストールしてあることを前提としてい2番目のListViewにはBEFOREがインストールされています。

そうでない場合は、その後だけ ..... ListViewの変数名を逆

+0

これは実際に治療を働いた! 必要な目的のためにフォームがリロードされたときに、後で外部に保存するために作成したクラスであるため、si.nameを保持しました。 ありがとうございます! – badatseesharp

0

開始するには(ただし、私はあなたがこれを与えることを示唆lvBeforeInstall、lvAfterInstall、lvAddedServicesような、より理解しやすい名前がオブジェクト) (listView1.Items.Count < i)が返された場合は、 を追加できます。 をサブルーチンの先頭に追加します。これはnull-refを回避します。 ビューの代わりにモデル内のデータを比較することを強くお勧めします。 MVVMまたはMVCアーキテクチャを勉強するのは時間がかかるでしょう。現代のプログラミングデザインパターンでこの問題がどのように処理されるのか、

+0

申し訳ありませんが、私はC#(作成の3週間)ではなく、 "ビューの代わりにモデル"とはどういう意味ですか?そして、私はあなたが言及したアーキテクチャを見ているでしょう!あなたの時間をありがとう! – badatseesharp

+0

MVCデザインパターンを調べ、すべての謎を明らかにする;) – Jace

関連する問題