FUNCAO FORA DO COMUM

MARCOS 26/04/2012 11:00:51
#400818
Prezados colegas,
Estou habituado a criar funções no VB.NET para
retornar qualquer valor (String,Integer,Boolean,etc...)
Mas....

Agora surgiu uma necessidadde um pouco diferente:

Preciso criar uma simples função que retorne não um valor
único, mas um conjunto de valores numéricos.Ou seja,uma
função que retorne algo como um vetor.


1.) Alguém sabe me mostrar um exemplo,de como ficaria a sintaxe
da função neste caso?


2.) E como eu faria,para ler cada um dos valores, depois que
executar a função???
LVFIOROT 26/04/2012 11:41:17
#400821
um exemplo


Function func() As Array
Dim vetor(10) As String
Return vetor
End Function

LVFIOROT 26/04/2012 11:43:45
#400823
codigo, de exemplo, completo


Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x() As String = func()
End Sub


Function func() As Array
Dim vetor(10) As String
Return vetor
End Function

End Class
KERPLUNK 26/04/2012 12:09:41
#400826
Resposta escolhida
Uma opção ainda melhor ao invés de um array, seria um List<T>:

Function func() As List(Of Integer)
Dim vetor as List(Of Integer)
vetor.Add(1)
vetor.Add(2)
vetor.Add(3)
vetor.Add(4)
Return vetor
End Function

E para fazer um loop no retorno, algo como:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim x As List(Of Integer) = func()
For Each item As Integer In x
Label2.Text = item.ToString()
Next
End Sub
ou melhor ainda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
For Each item As Integer In func()
Label2.Text = item.ToString()
Next
End Sub

E usando uma expressão Lambda:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
func().ForEach(Function(item) Label2.Text = item.ToString())
End Sub

Acredite ou não, aquela linha [Ô]func().ForEach(Function(item) Label2.Text = item.ToString())[Ô] faz exatamente a mesma coisa que os outros for...each


Mas esse tipo de função, não tem nada [Ô]fora do comum[Ô], fora do comum, seria uma função que retorna uma função...
LVFIOROT 26/04/2012 14:11:58
#400843
também acho o list melhor, porem como a pergunta era especifica fiz uma resposta especifica....

agora aquele...

Citação:

Acredite ou não, aquela linha [Ô]func().ForEach(Function(item) Label2.Text = item.ToString())[Ô] faz exatamente a mesma coisa que os outros for...each



realmente ficou muito bom!
PEGUDO 26/04/2012 15:51:15
#400851
Só para complementar a resposta dos colegas:
Se você não souber o tamanho o Array vai ter, vai ter que usar [txt-color=#0000f0]ReDim Preserve[/txt-color]:

No Clique do botão
Dim Vetor() As String = PreencheVetor()

Depois crie a função:
Public Function PreencheVetor() As Array 
Dim Vetor1() As String = {[txt-color=#e80000][Ô]Dado1[Ô][/txt-color], [txt-color=#e80000][Ô]Dado2[Ô][/txt-color], [txt-color=#e80000][Ô]Dado3[Ô][/txt-color], [txt-color=#e80000][Ô]Dado4[Ô][/txt-color], [txt-color=#e80000][Ô]Dado5[Ô][/txt-color]}
Dim Vetor2() As String
Dim X As UInt32 = 0

For X = 0 To Vetor1.Count - 1
ReDim Preserve Vetor2(X)
Vetor2(X) = Vetor1(X)
Next

PreencheVetor = Vetor2

Return PreencheVetor()
End FuncTion

repare que o uso do Vetor1 foi só para você ver o uso do ReDim no Vetor2
Abraços
Tópico encerrado , respostas não são mais permitidas