F#类将对象值分配给另一个对象

时间:2016-03-09 17:02:14

标签: c# .net visual-studio oop f#

来自C#背景,我正在尝试将一个类的实例分配给F#中另一个类的实例,但是我收到错误'Type Initialisation Exception'

我的代码是

//filename is CCPType.fs

module CCPType =

    type CCPClass() = class
        let mutable p = Unchecked.defaultof<int>
        let mutable d = Unchecked.defaultof<int[,]>

        member self.P
            with get () = p
            and set (value) = p <- value

        member self.D
            with get () = d
            and set (value) = d <- value

    end

//filename is Programme.fs

Module Start =

    [<EntryPoint>]
    let main argv = 
        let record = FileParser.ParseTextToCCPRecord(text) // returns CCPClass
        let z = Optimiser.Execute(record) //arg is of type CCPClass

//filename is Optimiser.fs

module Optimiser =

    let mutable ccpDataSet = CCPClass()

以下代码段是Optimiser模块中Optimiser.fs的一部分。我试过以下

    let Execute record =
        ccpDataSet <- record

我也试过

    let Execute(record: CCPClass) =
        ccpDataSet = new CCPClass()
        ccpDataSet.P <- record.P
        ccpDataSet.D <- record.D

我也试过

    let Execute(record: CCPClass) =
        ccpDataSet <- new CCPClass()
        ccpDataSet.P <- record.P
        ccpDataSet.D <- record.D

我也试过

    let Execute record =
        ccpDataSet.P <- record.P
        ccpDataSet.D <- record.D

我已经尝试了很多不同的方法,但我仍然无法将一个实例化的类复制到另一个。

我收到错误,'类型为“System.TypeInitializationException”'的未处理异常。

'“ccpDataSet”抛出类型为“System.TypeInitializationException”的异常。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:2)

感谢费奥多尔和卡斯滕,我想通了。

let mutable private OpenD : bool[] = Array.zeroCreate<bool> ccpDataSet.D.Length

由于我是F#的新手,它的行为与C#不同,我试图将OpenD的长度设置为空实例。将其更改为0并且有效:)