任何人都知道这段代码的问题是什么?
let rec Foo(a,b) =
match a () with
| None -> Some(b)
| Some(c) -> Some(Foo(c,b))
Run Code Online (Sandbox Code Playgroud)
这是编译器错误:
"类型不匹配.期待'a但给定'一个选项结果类型在统一''a'和''选项'时将是无限的"
添加到父XElement时,我的XAttribute的命名空间会被意外修改.
我有一些F#代码看起来像这样:
let myRoot = XElement(XName.Get("MyRoot"))
let mychildxelement = XElement(XName.Get("MyXElement"))
myRoot.Add(mychildxelement)
myRoot.Add(XAttribute(XNamespace.Xmlns + "odata", "http://mynamespace"))
let name = XNamespace.Get("odata") + myattrname
mychildxelement.Add(XAttribute(name, "false"))
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我打印出myRoot(myRoot.ToString())时,它会生成以下xml:
<MyRoot xmlns:odata="http://mynamespace">
<MyXElement p3:myattrname="false" xmlns:p3="odata" />
</MyRoot>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,它将命名空间更改为"p3"并在XElement的根级别添加额外的命名空间快捷方式.我真的想避免使用Element级别的xmlns.有谁知道如何避免这种情况?
在C#中,我可以像这样声明一个可空类型:
int? myNullableInt;
Run Code Online (Sandbox Code Playgroud)
我正在尝试做一些互操作,需要在F#中声明并设置一个可空类型,所以我声明了一个这样的类:
type TestEntity() =
member val OptionalValue = Nullable(1) with get, set
Run Code Online (Sandbox Code Playgroud)
后来我试着像这样分配它:
let testEnt = TestEntity()
testEnt.Optional <- null
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
在F#中执行此操作的正确方法是什么?此外,在互操作层,这与int?C#中的行为相同吗?