.net - 使用 Seq.cast 时出现问题

标签 .net f# seq

使用Seq.cast似乎总是失败,即使是像下面这样简单的事情:

let xor c = Seq.cast c |> Seq.reduce (^^^)
xor [1;3]       // Works, assuming because no cast is necessary
xor ['a';'b']   // Fails
xor [2u]        // Fails

后两者因指定 Actor 无效而失败。我错过了什么?

我正在尝试使用Seq.cast将一堆东西转换为 uint16 ,但由于某种原因它总是失败(即使我用 Seq.cast<uint32> 注释它)。这是怎么回事?

最佳答案

我相信这是因为 Seq.cast 只会执行类型强制转换,而不是类型强制:您想要 Seq.cast。映射 uint32 c |> Seq.reduce (^^^).

强制转换和强制转换之间的区别在于,当强制转换更改静态类型时,值会被解释为不更改其动态类型(例如:我知道这个 Animal 实际上是 Dog),强制创建了一个全新的值......至少从语言的角度来看。 CLR 中的划分似乎主要集中在值类型(强制)和引用类型(强制转换)之间,这使得保持直线更容易一些。

关于.net - 使用 Seq.cast 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711896/

相关文章:

c# - 如何从 F# 使用 C# 对象?

clojure - 为什么Clojure集合不直接实现ISeq接口(interface)?

map - 从两个或更多序列创建映射序列

R从两列创建一个序列表

.net - BlipExtension Schema URI : "28A0092B-C50C-407e-A947-70E740481C1C" 的值

c# - 将 nhibernate 与 Unity3D 集成

c# - 有人可以向我解释这段代码吗?

f# - Newtonsoft Converter FromJson - 意外标记

asp.net - 如何使用 localDB 将 ASP.NET MVC 4 应用程序部署到 Windows 7 上的本地 IIS?

f# - 如何使用可变字段和不可变字段初始化结构体?