Почему result.Add (значение) не выполняется?
Это потому, что LINQ использует отложенное выполнение.Пока вы на самом деле не перечислите результаты (возврат Select
), делегаты не будут выполняться.
Для демонстрации попробуйте следующее:
List<int> result = new List<int>();
var list = new List<int> { 1, 2, 3, 4 };
var results = list.Select(value =>
{
result.Add(value);//Does not work??
return value;
});
foreach(var item in results)
{
// Just iterating through this will cause the above to execute...
}
При этом это плохая идея .Запросы LINQ не должны иметь побочных эффектов, если вы можете их избежать.Подумайте о Select
как о способе преобразования ваших данных, а не о выполнении кода.
Однако это не выполнено. Еще один вопрос, как сделать метод foreach для IEnumerable с помощью метода расширения?*
Вы можете написать свой собственный метод расширения:
public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
{
foreach(var item in items)
action(item);
}
Однако я бы не советовал этого делать.За подробностями обращайтесь к сообщению Эрика Липперта по теме .