Foi útil?

Solução

Atualmente, não há equivalente ao retorno de rendimento do C # no VB.Net a partir de um nível de sintaxe da linguagem.

No entanto, houve uma gravação recente em revista MSDN por Bill McCarthy sobre como implementar um padrão semelhante em VB.Net 9.0

Outras dicas

O novo Async CTP inclui suporte para Yield em VB.NET .

Consulte Iterators Visual Basic para obter informações sobre o uso.

Veja minhas respostas aqui:

Para resumir:
não VB.Net não tem rendimento, mas C # implementos deu através da conversão de seu código para uma máquina de estado por trás disso cenas. de VB.Net chave Static também permite que você estado loja dentro de uma função, por isso, em teoria, você deve ser capaz de implementar uma classe que permite escrever código semelhante quando usado como um membro Static de um método.

Sem rendimento retorno em VB.NET :( Basta criar uma lista e devolvê-lo.

Nos bastidores, o compilador cria uma classe enumerador para fazer o trabalho. Desde VB.NET não implementa este padrão, você tem que criar sua própria implementação de IEnumerator (Of T)

A seguir dá saída: 2, 4, 8, 16, 32

Em VB,

Public Shared Function setofNumbers() As Integer()

    Dim counter As Integer = 0
    Dim results As New List(Of Integer)
    Dim result As Integer = 1
    While counter < 5
        result = result * 2
        results.Add(result)
        counter += 1
    End While
    Return results.ToArray()
End Function

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    For Each i As Integer In setofNumbers()
        MessageBox.Show(i)
    Next
End Sub

Em C #

   private void Form1_Load(object sender, EventArgs e)
    {
        foreach (int i in setofNumbers())
        {
            MessageBox.Show(i.ToString());
        }
    }

    public static IEnumerable<int> setofNumbers()
    {
        int counter=0;
        //List<int> results = new List<int>();
        int result=1;
        while (counter < 5)
        {
          result = result * 2;
          counter += 1;
          yield return result;
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top