如何使用默认构造函数创建记录类

cnd*_*cnd 5 f# constructor struct class

结构得到了默认的构造函数,就像我一样

type tagONEDEV_FlowRec =
    struct
        .......
    end
Run Code Online (Sandbox Code Playgroud)

我可以这样做,new DeviceModel.tagONEDEV_FlowRec()但它无法解决这个问题:

let (<++|) device bytes size =
    let unmanagedPtr = Marshal.AllocHGlobal(size : int)
    Marshal.Copy( (bytes : byte array), 0, unmanagedPtr, size)
    Marshal.PtrToStructure(unmanagedPtr, (device : obj)) // Here
    Marshal.FreeHGlobal(unmanagedPtr)
Run Code Online (Sandbox Code Playgroud)

我需要一个类似的记录课

[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type tagONEDEV_FlowRec = { 
    mutable ....;}
Run Code Online (Sandbox Code Playgroud)

要么

type tagONEDEV_FlowRec =
    class
        .......
    end
Run Code Online (Sandbox Code Playgroud)

但是这里没有默认的构造函数,并且结构非常大,无法手动初始化它们,所以如何将这些类与默认构造函数一起使用?

如果我找不到解决方案,我认为在C#或甚至VB.NET上重新编写这部分将会更快.听起来很像拐杖解决方案,但看起来我还不能用F#OOP部分拨号.

另外一个:我不想输入的东西是:

               {TimeRec     = 0; 
                Num         = 0us;
                FlagErr     = 0us;
                C6          = 0.0;
                C2H6        = 0.0;
                C3H8        = 0.0;
                CH4         = 0.0;
                CO2         = 0.0;
                iC4H10      = 0.0;
                iC5H12      = 0.0;
                neoC5H12    = 0.0;
                N2          = 0.0;
                nC5H12      = 0.0;
                O2          = 0.0;
                nC4H10      = 0.0;
                He          = 0.0;
                H2          = 0.0;
                H2O         = 0.0;
                id          = 0us; }
Run Code Online (Sandbox Code Playgroud)

< - 这就是我想要的默认设置,因为我有更多更大的结构然后编写这样的构造器是邪恶的.

Car*_*ten 3

正如 jpalmer 试图解释必须使用参数初始化记录一样。我认为你应该尝试使用

type MyStruct =
    struct
        val mutable myInt : int
        val mutable myString : string
    end
Run Code Online (Sandbox Code Playgroud)

请参阅此处:MSDN 文档显式字段

是的,我知道有更多的代码行和额外的“struct”、“end”和一些“val”,但这真的这么难吗?如果您的类型使用了 1000 个属性,无论如何您都应该重新考虑您的代码。