- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 F# 等价的标记联合。我需要在应用程序代码的热路径中使用它,其中有区别的联合可能会导致过多的堆分配。
这是示例:
[<Struct; StructLayout(LayoutKind.Explicit)>]
type Result =
[<DefaultValue; FieldOffset 0>]
val mutable IsAsync : bool
[<DefaultValue; FieldOffset 1>]
val mutable Async : Async<obj>
[<DefaultValue; FieldOffset 1>]
val mutable Sync : obj
static member Async(a:Async<obj>) = Result(IsAsync = true; Async=a)
static member Sync(s:obj) = Result(IsAsync = false; Sync=s)
new(a:Async<obj>) = { IsAsync = true; Async = a; }
new(s:obj) = { IsAsync = false; Sync=s }
最佳答案
你有三个问题:
,
)而不是分号( ;
)分隔构造函数参数。 [<Struct; StructLayout(LayoutKind.Explicit)>]
type Result =
[<DefaultValue; FieldOffset 0>]
val mutable IsAsync : bool
[<DefaultValue(false); FieldOffset 8>]
val mutable Async : Async<obj>
[<DefaultValue; FieldOffset 8>]
val mutable Sync : obj
static member MakeAsync(a:Async<obj>) = Result(IsAsync = true, Async=a)
static member MakeSync(s:obj) = Result(IsAsync = false, Sync=s)
关于f# - 使用 F# Struct 和 Explicit LayoutKind 创建标记联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202852/
运行这段代码时: using System; using System.Collections.Generic; using System.Linq; using System.Text; using
我有一个结构,其中有一个报告为重叠的非重叠字段。 [FieldOffset(8)] Int32 X; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1
问题 我尝试使用 [StructLayout(LayoutKind.Explicit)] 构建一个结构 (SA),它有一个字段是另一个 struct (SB). 首先:我很惊讶我被允许在没有[Stru
我有代码使用指针对数据 block 进行异或,速度很快,但我想摆脱对程序集的“不安全”要求。如果我将其更改为使用 LayoutKind.Explicit 并将“ulong[]”覆盖在“byte[]”之
我需要以关于声明顺序的保证顺序获取字段信息。现在我正在使用属性来指定顺序。 有没有更自动化的方法来做到这一点? 有没有人知道 LayoutKind.Sequential 是如何工作的,我是否可以应用它
我正在尝试创建一个 F# 等价的标记联合。我需要在应用程序代码的热路径中使用它,其中有区别的联合可能会导致过多的堆分配。 这是示例: [] type Result = [] val m
首先,据说 boolean 类型具有四字节值的默认编码类型。所以下面的代码有效: struct A { public bool bValue1; pub
如果结构包含 DateTime 字段,为什么 LayoutKind.Sequential 的工作方式不同? 考虑以下代码(必须在启用“不安全”的情况下编译的控制台应用程序): using System
默认情况下,C# 中的 structs 是使用 [StructLayout( LayoutKind.Sequential )] 实现的,原因基本上表明这些类型的对象通常用于 COM Interop 及
下面是一个完整的程序。只要您不取消注释顶部的“#define BROKEN”,它就可以正常工作。中断是由于 PInvoke 未能正确编码联合。所讨论的 INPUT_RECORD 结构有许多子结构,可以
我有一个传输二进制数据的设备。为了解释数据,我定义了一个匹配数据格式的 struct。 struct 有一个 StuctLayoutAttribute与 LayoutKind.Sequential .
我想在非托管 PInvoke 方案中使用 System.Numerics.Complex。使用 ILSpy,我注意到它没有分配 LayoutKind.Sequential 属性。 /// Repres
我是一名优秀的程序员,十分优秀!