Por que uma função VB.Net essa seqüência retorna somente realmente voltar um único caractere?
Pergunta
Eu estou chamando uma função que retorna uma string, mas é apenas realmente retornando o primeiro caractere da string é suposto estar voltando.
Aqui está um exemplo de código para recriar o problema que estou enfrentando:
Public Function GetSomeStringValue(Value as Integer) As String
... Code Goes here
Return Some_Multicharacter_string
End Function
A chamada de função se parece com:
SomeStringValue = GetSomeStringValue(Value)
Porque é que este não retornando toda a cadeia?
Solução
Nota: esta resposta foi originalmente escrito pelo OP, Kibbee, como uma auto-resposta. No entanto, ele foi escrito no corpo da questão, não como uma resposta em separado real. Uma vez que o OP se recusou repetidos pedidos por outros usuários, incluindo um moderador, para repassar, de acordo com regras do site, estou reposting-lo eu mesmo.
Depois de tentar uma centena de coisas diferentes, refatoração meu código, percorrendo o código no depurador muitas vezes, e até mesmo ter um olhar colega de trabalho para o problema, finalmente, em um flash de gênio, descobri a resposta.
Em algum momento, quando eu estava refatoração do código, eu mudei a função para se livrar do parâmetro Valor, deixando-a da seguinte forma:
Public Function GetSomeStringValue() As String
... Code Goes here
Return Some_Multicharacter_String
End Function
No entanto, I esqueceram de remover o parâmetro que eu estava passando ao chamar a função:
SomeStringValue = GetSomeStringValue(Value)
O compilador não pode reclamar porque interpretou o que eu estava fazendo como chamar a função sem parênteses, que é um recurso legado dos dias VB6. Em seguida, o parâmetro Valor transformado no índice da matriz da string (aka matriz de caracteres) que foi retornado da função.
Então eu removi o parâmetro, e tudo funcionou bem:
SomeStringValue = GetSomeStringValue()
Estou postando isso para que outras pessoas vão reconhecer o problema quando / se eles nunca encontrá-lo, e são capazes de resolvê-lo muito mais rapidamente do que eu fiz. Demorou um tempo para eu resolver, e eu espero que eu possa salvar os outros algum tempo.