Массив по умолчанию равен «ничто», а не «0» в структуре - PullRequest
0 голосов
/ 29 марта 2012

В настоящее время я застрял в проблеме, связанной с объявлением массива типа short в структуре и установкой по умолчанию «ничто» вместо «0» после ReDim.

'Declaring array and setting it's initial size


Private Structure Totals_T  
Dim sTot_Desc As String 
<VBFixedArray(10)> Dim iTot_Cnt() As Short  
        Public Sub Initialize()  
                ReDim iTot_Cnt(10)  
End Sub 

End Structure   

Private m_Totals() As Totals_T 'Define the array 


'Calling the structure for the two variables declared in the structure
 If iNewCnt = 1 Then 
 ReDim m_Totals(10)  
 **m_Totals(0).**iTot_Cnt(iColumn_No) = m_Totals(0).iTot_Cnt(iColumn_No) + 1 

При вызове m_Totals (0) возвращенные массивы имеют 10 записей в массиве с sTot_Desc и iTot_Cnt, у которых во всех записях ничего не задано.

Когда я ReDim m_Totals, обе переменные, которые я объявил в структуре (sTot_Desc и iTot_Cnt), объявляются как ничего, это хорошо для String, но мне нужно, чтобы Short, который я объявил, был объявлен как '0', как я и думал, когда вы выполняете ReDim.Может кто-нибудь увидеть, что здесь происходит и почему он объявляет мои переменные как «ничто», а не по умолчанию «0» для короткого и «» / ничто для строки?

Любая помощь будет здорово!

1 Ответ

1 голос
/ 29 марта 2012

Первая проблема заключается в том, что вы не вызываете метод Initialize после переопределения массива структуры.Вы можете исправить это следующим образом:

   For Each total As Totals_T In m_Totals
        total.Initialize()
    Next

Вторая проблема заключается в том, что строки всегда инициализируются ничем;вам нужно явно установить их в пустую строку, если вы хотите, чтобы что-то произошло.Вы можете исправить это, изменив метод Initialize:

    Public Sub Initialize()
        sTot_Desc = String.Empty
        ReDim iTot_Cnt(10)
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...