Pass parameters with properties c#

Asked

Viewed 176 times

3

I’m putting together a script of fighters, the category I want to be a private method and that it is according to the weight that the user type, but I’m not able to mix these two attributes in the function. Category: string and weight: double.

The code generates error in the constructor, when I call the set function of the category attribute.

class Lutador
    {
        private string _categoria;

        public string Nome { get; set; }

        public double Peso { get; set; }

        public Lutador(string nome, double peso)
        {
            Nome = nome;
            Peso = peso;
            //Erro
            Categoria = Peso;
        }

        public string Categoria
        {
            get { return _categoria; }
            set
            {
                if (Peso <= 50.0)
                {
                    _categoria = "leve";
                }else if (Peso <= 80.0)
                {
                    _categoria = "médio";
                }
                else
                {
                    _categoria = "pesado";
                }
            }

    } 
}

1 answer

5

In your code you declare Categoria as a type string, but tries to initialize it with a double. Not only is this a mistake, but it doesn’t make sense to do it that way.

If a the value of Categoria will be generated from the Peso, it would not make more sense to create a setter for Peso which also assigns value to the Categoria within that setter?

Example:

class Lutador
{
    private double peso;

    public string Nome { get; set; }

    // O valor de Categoria sempre será gerado pela nossa classe, então não
    // vamos permitir que o setter seja acessado externamente
    public string Categoria { get; private set; }

    public double Peso 
    { 
        get
        { 
            return peso; 
        }
        set
        {
            // peso recebe o valor normalmente
            peso = value;
            // Categoria também recebe um valor baseado no peso
            // a seguinte expressão se chama expressão ternária
            Categoria = value <= 50.0 ? "leve" : value <= 80.0 ? "medio" : "pesado";
        }
    }

    public Lutador(string nome, double peso)
    {
        Nome = nome;
        Peso = peso;
    }
}
  • Helped too much, I understood your logic well, I also liked the line of reasoning.

  • Another alternative would be to create a get to the Categoria to generate the values leve, medio and pesado just when you access the property. I think it would be more concise that way.

Browser other questions tagged

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