Запрос возвращает MongoCursor<BsonDocument>
, который не реализует IDisposable
, поэтому вы не можете использовать его в блоке using.
Важным моментом является то, что перечислитель курсора должен располагаться, а не сам курсор, поэтому, если вы использовали курсор IEnumerator<BsonDocument>
непосредственно для перебора курсора, то вам нужно было бы его расположить, как это:
using (var iterator = images.Find(query).SetLimit(1).GetEnumerator())
{
while (iterator.MoveNext())
{
var bsonDoc = iterator.Current;
// do something with bsonDoc
}
}
Однако вы, вероятно, никогда не сделаете этого и вместо этого будете использовать цикл foreach. Когда перечислитель реализует IDisposable, как это происходит, цикл с использованием foreach гарантирует , что его Dispose()
метод будет вызван независимо от того, как завершится цикл.
Следовательно, циклическая обработка без явного удаления безопасна:
foreach (var bsonDocs in images.Find(query).SetLimit(1))
{
// do something with bsonDoc
}
As оценивает запрос с помощью Enumerable.ToList , который использует зацикленный цикл за кадром:
var list = images.Find(query).SetLimit(1).ToList();