如果类型中有重写ToString
type TestMe ()=
override __.ToString() = null然后我通过"%A"说明符输出它
printfn "*%A*" (TestMe())为什么它抛出一个System.NullReferenceException
我本以为它会表现得像
printfn "*%A*" null它只是打印<null>,没有任何异常。
发布于 2017-07-23 10:35:04
这个问题是got fixed in F# 4.1,它现在显式地处理ToString()返回null的情况。在此修复之前,null将在堆栈中向上移动,并最终被取消引用。
升级您的FSharp.Core版本将为您解决此问题。
话虽如此,我想指出的是,从ToString返回null通常是一个大禁忌。即使是MSDN docs也有一个明确的警告。
发布于 2017-07-23 10:30:07
真的吗?
我得到以下输出:
type TestMe ()=
override __.ToString() = null
TestMe()
//val it : TestMe =
printfn "%A" (TestMe())
//val it : unit = ()这里有一个细微的区别,因为我假设反射在unit和null之间做了一些转换,但它没有显示异常。为什么你需要"*%A*"中的星星?
https://stackoverflow.com/questions/45260047
复制相似问题