gpt4 book ai didi

c# - 默认情况下,F# 中的引用是否不可为空?

转载 作者:太空狗 更新时间:2023-10-29 22:11:17 25 4
gpt4 key购买 nike

我知道在 C# 中不是这样,在 Haskell 这样的语言中是这样(如果我没记错的话),所以我想也许 F# 默认也有相同的语义。

此外,尽管它在 C# 中不存在,但它是语言而非运行时的限制,对吧?就像 F# 或其他一些新的 .NET 语言一样,实际上可以将其作为默认实现,而无需使用任何类型的 hack。

最佳答案

在 F# 中,如果您在 F# 代码中定义了一个新类或其他类型,那么默认情况下它将是不可空的,例如

type MyClass() = ...
...
let x : MyClass = null // does not compile

然而,它编译为 .NET IL 代码作为一个类,它是 .NET 上的引用类型,可以为 null,因此 C# 或什至在 F# 中都可以创建该类型的 null

let x : MyClass = Unchecked.defaultOf<MyClass>

会给你一个空值。因此,从这个意义上说,它在很大程度上是“运行时的限制”——您永远无法创建一种 .NET 语言,既可以“将类暴露给 C#,使其看起来像一个普通类”,又可以“确保该类型永远不会为空”。所以你总是必须在这里做出务实的决定。当您留在 F# 中时,F# 试图防止发生意外和处理 null 的烦恼,但如果您处理互操作或 .NET 运行时细节,最终 null 总是会徘徊。 (十亿美元的错误。)

关于c# - 默认情况下,F# 中的引用是否不可为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5224973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com