Perché una funzione VB.Net che restituisce stringa in realtà restituisce solo un singolo carattere?

StackOverflow https://stackoverflow.com/questions/142697

  •  02-07-2019
  •  | 
  •  

Domanda

Sto chiamando una funzione che restituisce una stringa, ma in realtà sta solo restituendo il primo carattere della stringa che dovrebbe restituire.

Ecco un esempio di codice per ricreare il problema che sto riscontrando:

Public Function GetSomeStringValue(Value as Integer) As String
    ... Code Goes here
    Return Some_Multicharacter_string
End Function

La chiamata di funzione è simile a:

SomeStringValue = GetSomeStringValue(Value)

Perché questo non restituisce l'intera stringa?

È stato utile?

Soluzione

  

Nota: questa risposta è stata originariamente scritta dall'OP, Kibbee, come risposta autonoma. Tuttavia, è stato scritto nel corpo della domanda, non come una vera risposta separata. Poiché l'OP ha rifiutato ripetute richieste da parte di altri utenti, incluso un moderatore, di ripubblicare in conformità con le regole del sito, lo ripubblo da solo.

Dopo aver provato un centinaio di cose diverse, rifattorizzare il mio codice, esaminare più volte il codice nel debugger e persino avere un collega che ha esaminato il problema, alla fine, in un lampo di genio, ho scoperto la risposta.

Ad un certo punto, durante il refactoring del codice, ho cambiato la funzione per eliminare il parametro Value, lasciandolo come segue:

Public Function GetSomeStringValue() As String
    ... Code Goes here
    Return Some_Multicharacter_String
End Function

Tuttavia, ho trascurato di rimuovere il parametro che stavo passando quando ho chiamato la funzione:

SomeStringValue = GetSomeStringValue(Value)

Il compilatore non si è lamentato perché interpretava quello che stavo facendo come chiamare la funzione senza parentesi, che è una funzionalità legacy dei giorni VB6. Quindi, il parametro Value è stato trasformato nell'indice di array della stringa (aka array di caratteri) che è stato restituito dalla funzione.

Quindi ho rimosso il parametro e tutto ha funzionato bene:

SomeStringValue = GetSomeStringValue()

Sto pubblicando questo in modo che altre persone riconoscano il problema quando / se lo incontrano e sono in grado di risolverlo molto più rapidamente di me. Mi ci è voluto un po 'di tempo per risolverlo, e spero di poter salvare gli altri un po' di tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top