Аргумент ByRef не работает должным образом

Кто-нибудь когда-нибудь видел это?

Public Shared Function IsAvailableByCampaignId(ByVal cn As SqlConnection, ByVal tr As SqlTransaction, ByVal campaignId As Integer, ByRef dest As PricingThresholds) As Boolean
    Dim retObj = ItemTypes.PricingThresholds.GetThresholds(cn, tr, campaignId)
    If retObj IsNot Nothing Then
        dest = New PricingThresholds(retObj)
    End If
    Dim retVal As Boolean = retObj IsNot Nothing
    Return retVal
End Function

Когда я звоню внутреннему

Dim retObj = ItemTypes.PricingThresholds.GetThresholds(cn, tr, campaignId)

Я получаю ненулевое или ничего retObj, но затем я использую его для создания с ним нового PricingThresholds, который является правильным типом, который мне нужно вернуть, и мне удается создать действительный объект возвращаемого типа, но я возвращаюсь из внешнего вызовите parm dest передано ByRef не имеет значения и является ничем или нулем.

Как будто VB не работает.

Я полагаю, я могу просто вернуть это по-другому.

1 ответ

Ниже код показывает, что все работает, как ожидалось, т.е. dest переназначается и сохраняет свою ценность за пределами IsAvailableByCampaignId функция:

Sub Main()
  Dim dest As New PricingThresholds(1)
  Dim p = IsAvailableByCampaignId(dest)
End Sub

Class PricingThresholds
  Dim _id As Integer
  Sub New(id As Integer)
    _id = id
  End Sub
End Class

Public Function IsAvailableByCampaignId(ByRef dest As PricingThresholds) As Boolean
  dest = New PricingThresholds(2)
  Return True
End Function

Не стесняйтесь поиграть с этим кодом и посмотрите, сможете ли вы воспроизвести поведение, которое у вас есть.

Другие вопросы по тегам