财产没有显示价值

zer*_*ing 1 f#

我在类中定义了一个属性,如:

type Customer() =
    let mutable _lastName = String.Empty
    member val LastName = _lastName with get
Run Code Online (Sandbox Code Playgroud)

在方法QueryData中,我为_lastName赋值:

member self.QueryData () =

            // CODE
            let addressData = bp.GetStructure("PE_PERSONALDATA")
            _lastName <- addressData.GetString("LASTNAME")
            null
        | RfcCommunication ex ->
            let basedComm = ex :> Exception
            basedComm
        | RfcLogon ex ->
            let basedLogon = ex :> Exception
            basedLogon
        | RfcAbapRuntime ex ->
            let basedAbap = ex :> Exception
            basedAbap
Run Code Online (Sandbox Code Playgroud)

在main函数中,我创建了一个Customer()实例并读取LastName属性:

[<EntryPoint>]
let main argv = 

    let customer = CustomerBapi.Customer()
    let ex = customer.QueryData()

    if ex <> null then printfn "%s" ex.Message
    printfn "%s" customer.LastName
Run Code Online (Sandbox Code Playgroud)

结果是空字符串.我试图调试程序,看到_lastName不为空

在此输入图像描述

为什么LastName属性为空?

Dav*_*haw 5

您的财产应如下所示:

member this.LastName with get () = _lastName
Run Code Online (Sandbox Code Playgroud)

您正在使用的属性类型_lastName作为值进行初始化.


MSDN的解释:

保存属性数据的私有值称为后备存储.要让编译器自动创建后备存储,请使用关键字成员val,省略自标识符,然后提供表达式以初始化属性.如果属性是可变的,请包含get,set.例如,以下类类型包括两个自动实现的属性.Property1是只读的,并初始化为提供给主构造函数的参数,Property2是一个初始化为空字符串的可设置属性:

type MyClass(property1 : int) =
    member val Property1 = property1
    member val Property2 = "" with get, set
Run Code Online (Sandbox Code Playgroud)