好的,所以我目前正在尝试查找列表中不存在于另一个字符串列表中的所有字符串。这是我的代码目前的样子:
var items = GetLiveItems(); // Returns List<string>
var currentItems = GetCurrentItems(); // Returns List<string>, Exception here
var rogueItems = items.Where(i => !currentItems.Contains(i)).ToList();
当我运行上面的代码时,我在第二行得到一个 System.NullReferenceException。如果我去掉第三行(items.Where...),异常就会消失。这两个列表相当大,第一个有 180k 字符串,第二个是 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();
工作。谁能解释为什么我以前的方法没有?以及其他建议的方法。
编辑:
所以,由于我很难在一个可以与大家分享的项目中重现这个,我想提供这个屏幕截图来证明我没有疯。
编辑:
这是带有例外逻辑的屏幕截图,您可以看到我成功地跨过了我之前遇到异常的线路。