1
现在我怎么做真的很奇怪。可悲的是我有很多结构并经常使用它们。有没有简单的方法来使用F#可变结构
这里是我如何行事了片刻:
[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type OneDevice = {
mutable id : UInt16
mutable typeDev : byte
mutable portNum : byte
mutable Parity : byte
mutable StopBits : byte
mutable BaudRate : byte
mutable addr1 : byte
mutable addr2 : byte
mutable useCanal : byte
mutable idGroup1 : byte
mutable idGroup2 : byte
mutable idGroup3 : byte
mutable idGroup4 : byte
mutable idGroupSos1 : byte
mutable idGroupSos2 : byte
mutable idGroupSos3 : byte
mutable idGroupSos4 : byte
mutable idSosReserv : byte
mutable addrModbus : byte
mutable offsetModbus : System.UInt16
[<field: MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)>]
mutable pwd : byte array
mutable offsetInModbus : UInt16
mutable reserv : UInt16 }
这是我如何定义结构。 “type str = struct ...”的作品真的不同!我需要我的结构变体。但写这只是我麻烦的一半,后半部分是我如何创建这种结构的新元素。让mutable dev = new OneDevice()不起作用!所以我需要做到这一点:
let mutable dev = {
id = 0us
typeDev = 0x00uy
portNum = 0x00uy
Parity = 0x00uy
StopBits = 0x00uy
BaudRate = 0x00uy
addr1 = 0x00uy
addr2 = 0x00uy
useCanal = 0x00uy
idGroup1 = 0x00uy
idGroup2 = 0x00uy
idGroup3 = 0x00uy
idGroup4 = 0x00uy
idGroupSos1 = 0x00uy
idGroupSos2 = 0x00uy
idGroupSos3 = 0x00uy
idGroupSos4 = 0x00uy
idSosReserv = 0x00uy
addrModbus = 0x00uy
offsetModbus = 0us
pwd = Array.zeroCreate 17
offsetInModbus = 0us
reserv = 0us }
这就是这里最古怪的部分。我可以让它变得更简单吗?
谢谢!
不应该是'[] type MyStruct'? –
ildjarn
可以工作。我有时使用这种方法与递归定义保持一致,递归定义需要'和'后面的属性。 – Daniel