Вы определенно можете использовать Seq.generate
из F # PowerPack (либо ссылаясь на него, либо проще, просто скопировав его из источника). Я думаю, что функция была удалена, потому что теперь вы можете обрабатывать удаление объектов с помощью ключевого слова use
.
Запись этого с использованием функции readOneRow
потребует использования изменяемого состояния, но вы, вероятно, можете переписать его, используя что-то вроде этого:
/// execute a command using the Seq.generate
let execCommand (connName: string) (cmdString: string) =
seq { use reader = openConnectionReader connName cmdString
while reader.ReadNext() do
// Read some information from the reader (as done in 'readOneRow')
let a = reader.GetInt32(0) // (e.g. ..or something like that)
yield a // generate next element of the sequence
}
Ключевое слово use
правильно выводит читателя, так что это делается автоматически для вас. Функция Seq.generate
довольно хороша, но я думаю, что написание одной и той же вещи в явном виде, вероятно, в большинстве случаев более читабельно. (Особенно, если вы не используете readOneRow
где-либо еще).