Представьте себе следующий код:
let d = dict [1, "one"; 2, "two" ]
let CollectionHasValidItems keys =
try
let values = keys |> List.map (fun k -> d.Item k)
true
with
| :? KeyNotFoundException -> false
Теперь давайте проверим это:
let keys1 = [ 1 ; 2 ]
let keys2 = [ 1 ; 2; 3 ]
let result1 = CollectionHasValidItems keys1 // true
let result2 = CollectionHasValidItems keys2 // false
Это работает, как я и ожидал. Но если мы изменим List на Seq в функции, мы получим другое поведение:
let keys1 = seq { 1 .. 2 }
let keys2 = seq { 1 .. 3 }
let result1 = CollectionHasValidItems keys1 // true
let result2 = CollectionHasValidItems keys2 // true
Здесь с keys2 я вижу сообщение об исключении в объекте values в отладчике, но исключение не выдается...
Почему это так? Мне нужна аналогичная логика в моем приложении, и я бы предпочел работать с последовательностями.
let values = keys |> Seq.map (fun k -> d.Item k) |> Seq.toList
. - person Funk   schedule 11.08.2017