gpt4 book ai didi

f# - C# 是否处理不允许来自 F# 的 null 的类型仍然可以为 null?

转载 作者:行者123 更新时间:2023-12-04 11:41:01 24 4
gpt4 key购买 nike

它是 C# 和 F# 之间的互操作

在 F# 中,

type test =
{
value: int
}

type Wrapper (value: test) =
member val Value = value with get, set

let trythis = new Wrapper(null) // error as expected

但是,在 C# 中
 var trythis = new Wrapper(null);  //this runs fine

最佳答案

类型上的不可为空约束是 F# 特定的功能,因此它在 .NET 中没有任何表示(因此 C# 不尊重它)。

事实上,您甚至可以在 F# 中使用不安全的 Unchecked.defaultof<_> 来解决这个问题。值(value):

let trythis = new Wrapper(Unchecked.defaultof<_>) 

如果您想检查 null,这将非常有用。在暴露给 C# 的对象中:
type Wrapper (value: test) =
if value = Unchecked.defaultof<_> then
invalidArg "value" "Value should not be null."
member val Value = value with get, set

关于f# - C# 是否处理不允许来自 F# 的 null 的类型仍然可以为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13177532/

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