下面的代码在FirstOrDefault()
方法中抛出 NullReferenceException:
open System
open System.Collections.Generic
open System.Linq
[<EntryPoint>]
let main argv =
let suspects = seq {
yield ("Frank", 1.0)
yield ("Suzie", 0.9)
yield ("John", 0.5)
// yield ("Keyser Soze", 0.3)
}
let likely = suspects.FirstOrDefault(fun (name, confidence) -> name = "Keyser Soze")
printfn "Name: %s" (fst likely)
Console.ReadLine() |> ignore
0
解决这个问题的最佳方法是什么?抓住它似乎是错误的。我可以手动抓取迭代器并将其放入 while 循环中,但那是 - 好吧,在很多层面上都是错误的。
[编辑] 我什至不能做我在 C# 中会做的事情,即检查结果是 null 还是 default,原因有两个:(1)错误是在FirstOrDefault()
方法中抛出的,而不是在我引用结果时; (2) 如果我尝试检查 null,编译器会抱怨 `The type '(string * float)' does not have 'null' as a proper value':
if likely = null then
printfn "Nothing to see here"
有什么建议么?