小编rys*_*ama的帖子

F#:有人能解释我的编译器错误吗?

任何人都知道这段代码的问题是什么?

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'和''选项'时将是无限的"

f# options pattern-matching

2
推荐指数
1
解决办法
238
查看次数

添加到XElement时,会意外修改System.Xml.Linq.XAttribute命名空间

添加到父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.有谁知道如何避免这种情况?

.net xml linq f#

2
推荐指数
1
解决办法
78
查看次数

如何在f#中将整数设置为null?

在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#中的行为相同吗?

.net c# f#

2
推荐指数
2
解决办法
460
查看次数

-5
推荐指数
1
解决办法
311
查看次数

标签 统计

f# ×3

.net ×2

c# ×2

c++ ×1

linq ×1

options ×1

pattern-matching ×1

std ×1

xml ×1