0

私は2つのリストを持っています。どのコンテンツの単純な文字列値。例として:

IList1 コンテンツ:

  • アベンジャーズ
  • シャッターアイランド
  • インセプション
  • ダークナイトライジング

リスト 2 の内容:

  • アベンジャーズ
  • シャッターアイランド
  • インセプション
  • ダークナイトライジング
  • 公園とレクリエーション
  • スキャンダル

2 つのリストを比較したいのですが、不一致の値が返されます。この場合のように、List1 の値と一致しないため、"Parks and Recreation" と "Scandal" が返されます。

私はそれを試してみました。ただし、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外がスローされます。

static void Main(string[] args)
    {
        List<string> list1 = new List<string>();
        list1.Add("The Avengers");
        list1.Add("Shutter Island");
        list1.Add("Inception");
        list1.Add("The Dark Knight Rises");

        List<string> list2 = new List<string>();
        list2.Add("The Avengers");
        list2.Add("Shutter Island");
        list2.Add("Inception");
        list2.Add("The Dark Knight Rises");
        list2.Add("Parks and Recreation");
        list2.Add("Scandal");    

       try
        {
            List<string> difference = Comparator(list1, list2);
            foreach (var value in difference)
            {
                Console.WriteLine(value);
            }
        }
        catch (System.NullReferenceException e)
        {
            Console.WriteLine(e.Message);    
        }

        Console.ReadLine();

    }
    public static List<string> Comparator(List<string> list1, List<string> list2)
    {
        IEnumerable<string> differenceQuery = list1.Except(list2);
        List<string> differ = null;

        foreach (string s in differenceQuery)
            differ.Add(s);

        return differ;
    }

誰でも私を助けることができますか?前もって感謝します。

4

4 に答える 4

8

Exceptメソッドはあなたが説明したことを正確に行うので、単に呼び出しToListて結果を取得しますList<T>:

return list2.Except(list1).ToList();

変数が初期化されていないNullReffereceExceptionため、コードがスローされます。differ

    List<string> differ = null;

次のように変更します。

    List<string> differ = new List<string>();

ただし、 を使用することをお勧めしToList()ます。次の方法以外は必要ありませComparatorん。

        List<string> difference = list2.Except(list1).ToList()
        foreach (var value in difference)
        {
            Console.WriteLine(value);
        }

更新- コード全体、期待どおりに動作

static void Main(string[] args)
{
    List<string> list1 = new List<string>();
    list1.Add("The Avengers");
    list1.Add("Shutter Island");
    list1.Add("Inception");
    list1.Add("The Dark Knight Rises");

    List<string> list2 = new List<string>();
    list2.Add("The Avengers");
    list2.Add("Shutter Island");
    list2.Add("Inception");
    list2.Add("The Dark Knight Rises");
    list2.Add("Parks and Recreation");
    list2.Add("Scandal");

    List<string> difference = list2.Except(list1).ToList();
    foreach (var value in difference)
    {
        Console.WriteLine(value);
    }

    Console.ReadLine();
}

結果

Parks and Recreation
Scandal
于 2013-04-18T13:57:31.673 に答える
5

問題は次の行にあります。

List<string> differ = null;

その後、リストに何かを追加しようとしましたが、リストはnull. あなたの例外があります。

次のように変更できます。

List<string> differ = new List<string>();

ただし、次の行を置き換える方が簡単です。

List<string> difference = Comparator(list1, list2);

に:

List<string> difference = list1.Except(list2).ToList();
于 2013-04-18T13:59:45.317 に答える
1

使用するExcept

var difference = list1.Except(list2).ToList();
于 2013-04-18T13:58:42.347 に答える
1

問題はここにあります。

List<string> differ = null;

する必要がある

List<string> differ = new List<string>();
于 2013-04-18T13:59:10.850 に答える