.net - F# 可以强制参数为 byte[8] 吗?

标签 .net f#

我需要一个从 8 字节数组生成校验和的小实用函数。

现在,这本身很简单,除了我不能在 C# 中使用 byte Checksum(byte[8] input) 作为方法声明 - 我不能指定数组的大小,所以我必须使用可以是任意大小的 byte[],然后在方法主体中我需要检查输入是否为空且长度 == 8。

我只是想知道 F# 是否可以做到这一点?我听说 F# 有更多选项可以将可接受的参数限制为函数(例如,可区分联合)?

当然,在这个简单的例子中,F# 会有点过头了,但我很好奇。

最佳答案

假设您不希望调用者单独传递它们,则 byte[] arg 可以在 IMO 中使用;我要做的唯一改变是我也会考虑传入一个起始偏移量(因为我经常发现自己远离 byte[] 的开头 - 但这取决于你的上下文) .

如果您真的想避免这种丑陋,您可以考虑将其视为 long (或者可以说更好(因为负数右移)用于位工作:ulong)。您总是知道它的长度正好是 8 个字节,并且它避免了启动时的几次查找。

您可以通过 byte*ulong*

的移位或不安全强制转换在两种格式之间切换

关于.net - F# 可以强制参数为 byte[8] 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775149/

相关文章:

f# - 映射一列的值

c# - 为什么一个别名的 C# 类型不能被另一个访问?

.net - CLR 4.0 中引入了哪些操作码?

.net - 以编程方式创建 Excel 实例并加载所有加载项

c# - 如何创建具有参数和私有(private)类型返回类型的快速调用委托(delegate),加速 DynamicInvoke

excel - 关于 F# 中的委托(delegate)、事件、事件处理程序

c# - 如何在列表框 wpf 中获取多个选定项?

.net - 哪些 .NET Framework 版本支持 Span<T> 的运行时增强功能?

f# - 从 F# 引用转换为 Linq 表达式时出现 InvalidOperationException

f# - 让和属性(property)分配在一行中