У меня вопрос о двух битах кода, которые, похоже, работают одинаково с первого взгляда, но дают разные результаты, когда я их создаю и запускаю.Неверное совпадение таблиц LINQ?
код А:
String[] colors = {"green", "red", "blue", "brown"};
var query = colors.Where(c => c.Contains("e"));
query = query.Where(c=> c.Contains("n"));
Console.WriteLine(query.Count());
Это производит консольный вывод «1», так как, предположительно, остались только значение «зеленое» (содержит как е и н).
Если код тонко изменен, однако, результат отличается
Код B:
String[] colors = {"green", "red", "blue", "brown"};
string s = "e";
var query = colors.Where(c => c.Contains(s));
s = "n";
query = query.Where(c=> c.Contains("n"));
Console.WriteLine(query.Count());
Это производит консольный вывод «2», а также значение, оставшееся в «запросе» является «зеленый, коричневый». Насколько я могу судить, причина в том, что мы присваиваем значение s «n», где ранее было «e». Если я сброшу содержимое «запроса», он будет содержать «зеленый/коричневый», несмотря на то, что я уже рассмотрел запрос ко всем значениям, содержащим «e».
Если бы кто-нибудь мог объяснить, почему это происходит, было бы здорово, спасибо!