さて、私は現在、別の文字列リストに存在しないリスト内のすべての文字列を見つけようとしています。これが私のコードが現在どのように見えるかです:
var items = GetLiveItems(); // Returns List<string>
var currentItems = GetCurrentItems(); // Returns List<string>, Exception here
var rogueItems = items.Where(i => !currentItems.Contains(i)).ToList();
上記のコードを実行すると、2 行目に System.NullReferenceException が発生します。3 行目 (items.Where...) を削除すると、例外はなくなります。2 つのリストはかなり大きく、最初は 180k 文字列、2 つ目は 290k 文字列ですが、それぞれ 12 文字しかありません。
問題は何ですか?
編集:
public static List<string> GetCurrentItems()
{
var db = DatabaseFactory.CreateDatabase("DB");
var command = db.GetStoredProcCommand("getItems");
var items = new List<string>();
using (var reader = SafeSqlReader(db.ExecuteReader(command)))
{
while (reader.Read()) items.Add(reader.GetString("name"));
}
return items;
}
編集:
したがって、以下のコードを使用します。
var rogueItems = items.Except(currentItems).ToList();
働きました。私の以前の方法がうまくいかなかった理由を誰か説明できますか? そして、他の提案された方法。
編集:
だから、これをプロジェクトで再現するのに苦労しているので、みんなと共有して見てみることができるので、このスクリーンショットを提供して、私が狂っていないことを証明したいと思います.
編集:
次に示すのは、Except ロジックのスクリーン ショットです。以前に例外が発生した行を正常にステップオーバーしたことがわかります。