как добавить один класс к другому из того же в vb.net - PullRequest
0 голосов
/ 01 ноября 2018

PropertyPolicy - это класс, который определяет коллекцию из нескольких полей / сущностей. Иногда две отдельные функции необходимы для создания коллекции. (LoadEstateAIN и LoadAIN). Мне нужно объединить результаты обоих классов, но я попробовал concat, но получил исключение приведения. Что будет работать здесь?

Public Class PropertyPolicy

    Private agentfield As Entity
    Private aininsuredfield() As Entity
    Private billinginfofield As BillingInfo
    Private cancellationdatefield As Date
    Private claimsfield() As Claims


    Public Property Agent As Entity
        Get
            Return Me.agentfield
        End Get
        Set(ByVal value As Entity)
            Me.agentfield = value
        End Set
    End Property

    Public Property AINInsured() As Entity()
        Get
            Return Me.aininsuredfield
        End Get
        Set(ByVal value As Entity())
            Me.aininsuredfield = value
        End Set
    End Property

    Public Property BillingInfo As BillingInfo
        Get
            Return Me.billinginfofield
        End Get
        Set(ByVal value As BillingInfo)
            Me.billinginfofield = value
        End Set
    End Property

    Public Property CancellationDate As Date
        Get
            Return Me.cancellationdatefield
        End Get
        Set(ByVal value As Date)
            Me.cancellationdatefield = value
        End Set
    End Property

    Public Property Claims() As Claims()
        Get
            Return Me.claimsfield
        End Get
        Set(ByVal value As Claims())
            Me.claimsfield = value
        End Set
    End Property

End Class



Dim propTemp1 As New PropertyPolicy
Dim propTemp2 As New PropertyPolicy
Dim propTempComb As New PropertyPolicy

propTemp1.AINInsured = LoadEstateAIN(policyid, asofDate, lob, NINclientid, estatecompany)
propTemp2.AINInsured = LoadAIN(policyid, asofDate, lob, NINclientid, estatecompany)

propTempComb.AINInsured = propTemp1.AINInsured.Concat(propTemp2.AINInsured)

1 Ответ

0 голосов
/ 01 ноября 2018

Результат Concat не является массивом; это IEnumerable(Of T). В вашем случае это IEnumerable(Of Entity). Вам просто нужно добавить ToArray() в конец Concat, если вы хотите присвоить его обратно в массив.

propTempComb.AINInsured = propTemp1.AINInsured.Concat(propTemp2.AINInsured).ToArray()

Разбивка этой строки кода:

[instance3].[property] = [instance1].[property].Concat([instance2].[property])

Назначает результат Concat свойству, но свойство является массивом, поэтому вам нужно изменить результат Concat, который является IEnumerable (Of Entity), в массив, тривиальный с ToArray.

Я мог бы пойти дальше и рекомендовать, чтобы вы не использовали массивы в качестве открытых членов, скорее IEnumerable. Кроме того, для некоторых из этих общедоступных / общедоступных свойств лучше использовать авто-свойства.

Public Class PropertyPolicy

    Private aininsuredfield As Entity()
    Private claimsfield As Claims()

    Public Property Agent As Entity
    Public Property BillingInfo As BillingInfo
    Public Property CancellationDate As Date

    Public Property AINInsured() As IEnumerable(Of Entity)
        Get
            Return aininsuredfield
        End Get
        Set(value As IEnumerable(Of Entity))
            aininsuredfield = value.ToArray()
        End Set
    End Property

    Public Property Claims() As IEnumerable(Of Claims)
        Get
            Return claimsfield
        End Get
        Set(value As IEnumerable(Of Claims))
            claimsfield = value.ToArray()
        End Set
    End Property

End Class

Кстати, это приведет к тому, что ваш оригинальный код будет работать без ToArray ()

propTempComb.AINInsured = propTemp1.AINInsured.Concat(propTemp2.AINInsured)
...