结构属性 - 表达式是一个值,因此不能作为赋值的目标

时间:2014-09-23 10:56:34

标签: .net vb.net class data-structures

我有两个班级:

Public Class SubiektGT
    Dim daneKlienta As SklepPobieranieDanych = New SklepPobieranieDanych(Me)

    Public Sub PrzefiltrujDaneKontrahenta()
    If daneKlienta.DaneKontrahenta.adres_fv = "" Then
        daneKlienta.DaneKontrahenta.adres_fv = daneKlienta.DaneKontrahenta.adres_wys 'ERROR
    End If
End Sub
End Class



Public Class SklepPobieranieDanych
    Public Structure Kontrahent
        Public adres_wys As String
        Public adres_fv As String
    End Structure

    Private _daneKontrahenta As Kontrahent

    Public Property DaneKontrahenta() As Kontrahent
    Get
        Return _daneKontrahenta
    End Get
    Set(value As Kontrahent)
        _daneKontrahenta = value
    End Set
End Property

    Public Sub PobierzTowaryKontrahenta()
        _daneKontrahenta.adres_fv = ""
        _daneKontrahenda.adres_wys = "a"
    End Sub
End Class

当我尝试将来自不同类的值分配给daneKlienta.DateKontrahenta.adres_fv时,我得到以下错误:表达式是一个值,因此不能成为赋值的目标。

那么如何从该类中分配值?这样做对我来说非常重要,请有人解释我为什么会这样。谢谢!

1 个答案:

答案 0 :(得分:2)

编译器指的是您的Kontrahent结构。

因为它是一个结构而不是一个类,在构造

daneKlienta.DaneKontrahenta.adres_fv =...

DaneKontrahenta实际上是daneKlienta中所有属性的副本。

也就是说,在第一个点调用从类中获取get的隐式DaneKontrahenta函数返回一个副本,而不是一个引用(因为Kontrahent不是引用类型) 。

因此,指定的值将随后与DaneKontrahenta的临时副本一起立即丢弃。

这有意义吗?