如果在类型
中覆盖ToString
type TestMe ()=
override __.ToString() = null
然后我通过"%A"
说明符
printfn "*%A*" (TestMe())
为什么抛出System.NullReferenceException
?
我原以为它的行为就像
printfn "*%A*" null
只打印<null>
,没有任何例外。
答案 0 :(得分:5)
此问题got fixed in F# 4.1,现在明确处理ToString()
返回null
的情况。在此修复之前,null
将向上移动并最终被解除引用。
升级您的FSharp.Core版本将为您解决问题。
话虽如此,我想指出从null
返回ToString
通常是一个很大的禁忌。即使MSDN docs也有一个特定的警告。
答案 1 :(得分:1)
我得到以下输出:
type TestMe ()=
override __.ToString() = null
TestMe()
//val it : TestMe =
printfn "%A" (TestMe())
//val it : unit = ()
由于我假设反射在unit
和null
之间进行了一些转换,但是它没有显示异常。为什么你需要"*%A*"
中的星星?