• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Rapsten

duvida

17 mensagens neste tópico

eu tenho este codigo:

public string obterDados()
        {
            string res = "";
            string res1 = "";
            res1 = res1 + " \t" + "Número\t" + "Nome\t";
            foreach (int numero_socio in socios.Keys)
            {
                string numero = ((Socios)socios[numero_socio]).Numero_socio.ToString();
                string nome = ((Socios)socios[numero_socio]).Nome.ToString();
                
              //  res = res + "Conta a Ordem: " + cod + " " + dat + " " + sld + "\n";
            
                res = res + "Socios-"+" \t"+ numero+ " \t"+ nome+"\n";
            }
            return res; res1;
        }

so k m dá erro ao devolver os dados de res1...

como faço para devolver os dois dados????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epá esse código está altamente ineficiente no que respeita a strings, as strings são objectos imutáveis logo estás a criar uma nova a cada concatenação o que é muiiito mau... usa o StringBuilder (vai ao MSDN)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estás a tentar retornar duas string? só podes retornar uma! ou retornas um array, List, etc com as duas ou fazes a sua concatenação....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens alguma solução?!?!?

é k n sei bem como fazer isto:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se não quiseres estudar o assunto experimenta  return res+res1;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso n dá resultado eu já tentei e dá-m as duas  juntas e n keria isso...

mas obrigado na mesma!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

public List<string> obterDados()
        {
            string res = "";
            string res1 = "";
            res1 = res1 + " \t" + "Número\t" + "Nome\t";
            foreach (int numero_socio in socios.Keys)
            {
                string numero = ((Socios)socios[numero_socio]).Numero_socio.ToString();
                string nome = ((Socios)socios[numero_socio]).Nome.ToString();

              //  res = res + "Conta a Ordem: " + cod + " " + dat + " " + sld + "\n";

                res = res + "Socios-"+" \t"+ numero+ " \t"+ nome+"\n";
            }
       List<string> list = new List<string>();
list.Add(res);
list.Add(res1);
            return list;
        }

PS: não te esqueças do include por causa da List<>

PS:não testei o código

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado!!!

mas já arranjei de outra forma....

mas obrigado na mesma.....

vou testar logo k possa, mas kual é a include para a List<>?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Diz ai a solução que usaste, pode ser menos boa que a do vitortomaz (ou melhor) e assim fica uma dúvida resolvida mais completa :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epá esse código está altamente ineficiente no que respeita a strings, as strings são objectos imutáveis logo estás a criar uma nova a cada concatenação o que é muiiito mau... usa o StringBuilder (vai ao MSDN)

Hmm...isso é porque ele está a declarar as strings dentro do ciclo certo?

Se ele usasse por exemplo:

public string obterDados()
        {
            string res = "";
            string res1 = "";
            string numero = "";
            string nome = "";
            res1 = res1 + " \t" + "Número\t" + "Nome\t";
            foreach (int numero_socio in socios.Keys)
            {
                numero = ((Socios)socios[numero_socio]).Numero_socio.ToString();
                nome = ((Socios)socios[numero_socio]).Nome.ToString();
                
              //  res = res + "Conta a Ordem: " + cod + " " + dat + " " + sld + "\n";
            
                res = res + "Socios-"+" \t"+ numero+ " \t"+ nome+"\n";
            }
            return res; res1;
        }

Assim, já não justificaria o uso da stringbuilder certo? Uma vez que ele está a usar sempre os mesmos objectos durante o ciclo.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm...isso é porque ele está a declarar as strings dentro do ciclo certo?

Não. É porque as Strings são objectos imutáveis, logo não se alteram. Se tu tens uma string "Baderous" e agora queres concatenar-lhe a string "p@p", o que vai acontecer é que vão ser criadas 3 strings em memória: a string "Baderous", a string "p@p" e a string "Baderousp@p". Isso é desperdício. Ao usares a StringBuilder, as "stringsbuilders" não têm a propriedade da imutabilidade, logo não há este desperdício de recursos. E esse código que puseste nem funciona (olha para o return).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu acabei por usar esta...

return res1+ res;

no final..

para  k era assim até k é melhor k posso fazer mais coisas...

mas as soluções aki apresentadas são mt boas.....

obrigado a todos..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não. É porque as Strings são objectos imutáveis, logo não se alteram. Se tu tens uma string "Baderous" e agora queres concatenar-lhe a string "p@p", o que vai acontecer é que vão ser criadas 3 strings em memória: a string "Baderous", a string "p@p" e a string "Baderousp@p". Isso é desperdício. Ao usares a StringBuilder, as "stringsbuilders" não têm a propriedade da imutabilidade, logo não há este desperdício de recursos.

Hmm...ok. ;)

Mas segundo li, só se justifica o uso da stringbuilder, quando trabalhamos com strings bastante largas, de modo a poupar recursos.

E esse código que puseste nem funciona (olha para o return).

Sim eu sei, foi tirado do 1º post. Era so para dar o exemplo do ciclo :)

Edit: E isso das strings serem imutáves só se aplica ao C#?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, no Java também se aplica... Em VB.NET também é provável que sim... Eu diria que qualquer linguagem que implemente um mecanismo como o StringBuilder, porque, se existe o StringBuilder, é para alguma coisa...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm...ok. :)

Mas segundo li, só se justifica o uso da stringbuilder, quando trabalhamos com strings bastante largas, de modo a poupar recursos.

Justifica-se sempre que se tem de fazer operações que impliquem alterar strings.

Edit: E isso das strings serem imutáves só se aplica ao C#?

Não. Também acontece no Java.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, no Java também se aplica... Em VB.NET também é provável que sim... Eu diria que qualquer linguagem que implemente um mecanismo como o StringBuilder, porque, se existe o StringBuilder, é para alguma coisa...

Justifica-se sempre que se tem de fazer operações que impliquem alterar strings.

Não. Também acontece no Java.

Ok. Obrigado pelo esclarecimento :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora