2013-07-28 4 views
0

Кто-нибудь когда-нибудь это видит?Аргумент 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 не имеет значения и ничего или null.

Это как VB не работает.

Я полагаю, что могу просто вернуть его другим способом.

+0

VB.NET работает, ваш код не делает правильные вещи. Можете ли вы также показать нам, где и как вы называете эту функцию? Проблема может быть там. – Styxxy

ответ

0

Ниже кода показывает, что все работает, как и ожидалось, т.е. 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 

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

Смежные вопросы