Представьте, что у меня есть следующее:
private IEnumerable MyFunc(parameter a)
{
using(MyDataContext dc = new MyDataContext)
{
return dc.tablename.Select(row => row.parameter == a);
}
}
private void UsingFunc()
{
var result = MyFunc(new a());
foreach(var row in result)
{
//Do something
}
}
Согласно документации выполнение linq будет отложено до фактического перечисления результата, который происходит в строке в foreach. Однако оператор using должен принудительно собирать объект в конце вызова MyFunct ().
Что на самом деле происходит, когда запускается утилизация и / или запускается результат?
Единственное, о чем я могу думать, это то, что отложенное выполнение вычисляется во время компиляции, поэтому фактический вызов перемещается компилятором в первую строку foreach, что приводит к правильному выполнению использования, но не выполняется до строки foreach ?
Есть ли гуру, который может помочь?
РЕДАКТИРОВАТЬ: ПРИМЕЧАНИЕ: этот код работает, я просто не понимаю, как.
Я немного прочитал и понял в своем коде, что я вызвал метод расширения ToList (), который, конечно, перечисляет результат. Поведение, помеченное галочкой, является совершенно правильным для фактического ответа на вопрос.
Извините за путаницу.