Jump to content

Dois retornos em uma mesma função


kelsch.cristiano
 Share

Recommended Posts

Pessoal,

Gostaria de criar uma Dll que importa um arquivo que contem 5 linhas e retornar cada uma dessas linhas em uma variável diferente.

Dúvida: Como criar mais de um retorno na minha função?

segue exemplo de até aonde cheguei.

private void LerArquivoTexto(string StrArquivo,)
    {
      try
      {
        //Cria uma instância do StreamReader para ler o arquivo
        //A declaração using fecha o stream no fim do escopo
        using (StreamReader sr = new StreamReader(StrArquivo))
        {
          String v_linha;
          int v_Contador;
          v_Contador = 0;
          //Ler e exibe as linhas até alcançar o fim do arquivo.
          while ((v_linha = sr.ReadLine()) != null)
          {
            switch (v_Contador)
            {
              case 0:
                v_Comando = v_linha;
                break;
              case 1:
                v_Param1 = v_linha;
                break;
              case 2:
                v_Param2 = v_linha;
                break;
              case 3:
                v_Param3 = v_linha;
                break;
            }
            v_Contador++;
          }
        }
        File.Delete(StrArquivo);
        MessageBox.Show("Comando: " + v_Comando + " - par1: " + v_Param1 + " - par2: " + v_Param2 + " - par3: " + v_Param3);
      }
      catch (Exception e)
      {
        MessageBox.Show("Não é possivel ler o arquivo");
        MessageBox.Show(e.Message);
      }

    }
Link to comment
Share on other sites

Em C# não podes retornar mais de um output numa função.

No teu caso podes retornar uma lista, ou um array, onde tens um valor em cada uma das posições.

Um workaround mais arcaico passa por retornar uma string com os valores concatenados, tendo um caracter, ou uma cadeia de caracteres, como separador. Esse caracter separador nunca pode exisir em nenhum dos valores retornados.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Podes criar um object que faz wrap ao retorno.

😉

Podes passar parâmetros ByRef!

?

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other sites

Guest c.henriques

Devolve um ArrayList ou então usa a keyword out para um número fixo de outputs, por exemplo:

public void LerArquivoTexto(string StrArquivo, out string str1, out string str2, out string str3) {}
Link to comment
Share on other sites

Boas!

Aqui tens duas hipóteses (ou um misto de ambas)

Se o objectivo for retornar dois ou mais valores, podes usar uma estrutura de dados (STRUCT)

Se o objectivo for retornar várias linhas (texto) então deves usar um Array

Por ultimo, se quiseres retornar várias linhas mas com campos diferentes (ou seja, não são apenas texto) podes usar um array de STRUCT.

Se quiseres aprofundar esta solução, responde aqui que eu coloco um exemplo.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.