Declaration of `var as object field

Asked

Viewed 146 times

5

How could I declare a variable var public so that it could take the return of the data.

How would the statement of these variables without completion:

       var tbuscar = ?;
       var retorno = ?;



public bool CarregaProdutosDermaClube(string consulta)
{
    var tbuscar = new BuscaProdutosDermaClubeDAL();
    var retorno = tbuscar.DadosDermaClube("");

    if (consulta != "")
    {
        return retorno[0].idproduto.Contains(consulta);
    }

    return false;
}

I wish to make the statement outside the method.

  • You want a property, right? These values will be used by other class methods?

  • 1

    You cannot, you have to define her type. You have to see what you want. If you want to return more than one thing, you can use a tuple in C# 7, or a class in previous versions. If it’s only two and one is already the booleaan maybe it’s too late to use one out. Find out what’s on this site, you need to leave now, I’ll come back to help more later, who can answer if you give more details than you want. She doesn’t need property unless she has to.

  • I am waiting for more details to see which is the best solution. How will consume this?

  • You’re still having doubts about this subject?

2 answers

6

To do strictly what you wish would be something like this:

public TipoDoRetornoDoMetodoDadosDermaClube ProdutosDermaClube {get; set;}

public bool CarregaProdutosDermaClube(string consulta) {
    var buscaProdutosDermaClube = new BuscaProdutosDermaClubeDAL();
    Retorno = this.buscaProdutosDermaClube.DadosDermaClube("");
    if (string.IsNullOrEmpty(consulta)) {
        return false;
    }
    return Retorno[0].idproduto.Contains(consulta);
}

to pick up the return would be something like this:

TipoDoRetornoDoMetodoDadosDermaClube variavel;
if (objeto.CarregaProdutosDermaClube("Sei lá o que")) {
    variavel = objeto.Retorno; //isto é horrível
}

Conceptually right

But this is probably a conceptual error, is to abuse the object for something unnecessary. The most correct, as I understand it, would be:

public bool CarregaProdutosDermaClube(string consulta, out TipoDoRetornoDoMetodoDadosDermaClube retorno) {
    var buscaProdutosDermaClube = new BuscaProdutosDermaClubeDAL();
    retorno = this.buscaProdutosDermaClube.DadosDermaClube("");
    if (string.IsNullOrEmpty(consulta)) return false;
    return retorno[0].idproduto.Contains(consulta);
}

There you call it:

TipoDoRetornoDoMetodoDadosDermaClube variavel;
if (objeto.CarregaProdutosDermaClube("Sei lá o que", out TipoDoRetornoDoMetodoDadosDermaClube variavel) {
    //faz algo aqui se precisar
}

C# 7

If you are using C# 7 you can do better:

public (bool, TipoDoRetornoDoMetodoDadosDermaClube) CarregaProdutosDermaClube(string consulta) {
    var buscaProdutosDermaClube = new BuscaProdutosDermaClubeDAL();
    retorno = this.buscaProdutosDermaClube.DadosDermaClube("");
    if (string.IsNullOrEmpty(consulta)) return (false, null);
    return (retorno[0].idproduto.Contains(consulta), retorno);
}

Call it that:

(var ok, var variavel) = objeto.CarregaProdutosDermaClube("Sei lá o que");
if (ok) {
    //faz algo aqui se precisar
}

Tuple

If you still want to use tuple before C# 7 can, but it is not so convenient and otimnized.

public Tuple<bool, TipoDoRetornoDoMetodoDadosDermaClube> CarregaProdutosDermaClube(string consulta) {
    var buscaProdutosDermaClube = new BuscaProdutosDermaClubeDAL();
    retorno = this.buscaProdutosDermaClube.DadosDermaClube("");
    if (string.IsNullOrEmpty(consulta)) return Tuple.Create(false, null);
    return Tuple.Create(retorno[0].idproduto.Contains(consulta), retorno);
}

Call it that:

TipoDoRetornoDoMetodoDadosDermaClube variavel;
var tupla = objeto.CarregaProdutosDermaClube("Sei lá o que");
if (tupla.Item1) variavel = tupla.Item2

You can still create a specific class to deal with the two values in a more typed way yet, but I see little advantage and some disadvantages.

There is a proposal for the implementation of Optional which is a specialization of a tuple. To be cool even C# would need another resource that it does not have. To do more or less you can copy the idea and create one yourself Optional and use. But in this circumstance I see no advantage.

In fact maybe just return the object may be enough. Instead have return one bool and check it, check if the object is null and ensure that he is null when it did not produce a usable result.

There is still the possibility to use exception, but even this, it is very bad.

Read more on Why should we avoid returning error codes?.

I put in the Github for future reference.

2

It is not possible to expose a local variable outside its scope, it will be necessary to use a typed property ex:

// Poderá ser acessado por qualquer parte do sistema.
public BuscaProdutosDermaClubeDAL TBuscar {get; set;}
// Ou poderá ser acessada somente pelos metodos da classe.
private BuscaProdutosDermaClubeDAL TBuscar {get; set;}

public bool CarregaProdutosDermaClube(string consulta)
{
   this.TBuscar = new BuscaProdutosDermaClubeDAL();

   var retorno = this.TBuscar.DadosDermaClube("");

    if (consulta != "")
    {
        return retorno[0].idproduto.Contains(consulta);
    }

    return false;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.