首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写ToString和`%A`说明符

重写ToString和`%A`说明符
EN

Stack Overflow用户
提问于 2017-07-23 07:03:37
回答 2查看 387关注 0票数 3

如果类型中有重写ToString

代码语言:javascript
复制
type TestMe ()=
    override __.ToString() = null

然后我通过"%A"说明符输出它

代码语言:javascript
复制
printfn "*%A*" (TestMe())

为什么它抛出一个System.NullReferenceException

我本以为它会表现得像

代码语言:javascript
复制
printfn "*%A*" null

它只是打印<null>,没有任何异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-23 10:35:04

这个问题是got fixed in F# 4.1,它现在显式地处理ToString()返回null的情况。在此修复之前,null将在堆栈中向上移动,并最终被取消引用。

升级您的FSharp.Core版本将为您解决此问题。

话虽如此,我想指出的是,从ToString返回null通常是一个大禁忌。即使是MSDN docs也有一个明确的警告。

票数 5
EN

Stack Overflow用户

发布于 2017-07-23 10:30:07

真的吗?

我得到以下输出:

代码语言:javascript
复制
type TestMe ()=
    override __.ToString() = null

TestMe()
//val it : TestMe =

printfn "%A" (TestMe())
//val it : unit = ()

这里有一个细微的区别,因为我假设反射在unitnull之间做了一些转换,但它没有显示异常。为什么你需要"*%A*"中的星星?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45260047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档