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.
You want a property, right? These values will be used by other class methods?
– George Wurthmann
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.– Maniero
I am waiting for more details to see which is the best solution. How will consume this?
– Maniero
You’re still having doubts about this subject?
– Maniero