例如,如果我有一条记录,例如:
type sample = { userId : string; }
然后我在C#中定义此记录,例如:
var samp = new sample()
{
userId = null;
};
然后如果我将此记录分配给在C#中调用的F#函数会发生什么?这合法吗?我只需要在F#函数中检查是否为null,或者这是不可能的?
答案 0 :(得分:1)
是的,通常,任何引用类型都可以为null。 F#编译器阻止对F#特定类型的空分配,例如F#代码中的记录和区分联合。但是,仍然可以从C#中为这些类型的变量赋值null。
String是一种引用类型,即使是F#也可以为null。您的C#代码稍微不准确,因为类型sample
在构造函数中会有userId
:
var samp = new sample(null);
如果您注释sample
类型为CLIMutable attribute,那么它也将具有无参数构造函数。