Question

J'ai une propriété comme ceci:

private Decimal _payout; 
public Decimal PayoutValue
    {
        get { return _payout; }
        set
        {
            _payout = value;

            //second part of following conditional is an enum
            if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
            {
                _payout /= 100;
            }
        }
    }

Comme vous pouvez le voir, il dépend de la valeur de PayoutType, qui est une simple propriété ENUM:

public CutType PayoutType { get; set; }

Mon problème est que PayoutType ne semble pas se mettre en avant PayoutValue est réglée, de sorte que le conditionnel ci-dessous est jamais vrai. Comment puis-je forcer le PayoutType à régler avant PayoutValue est évaluée?

Merci.

Mise à jour Merci pour vos réponses les gars. Je suppose que je aurais dû mentionner que la plupart du temps, cet objet est lié par DataContexts ou d'un Http.Post de mon côté client (projet MVC), donc je n'ai pas vraiment de constructeurs. Y at-il une autre façon, ou devrais-je commencer à faire preuve de créativité avec ma programmation?

Était-ce utile?

La solution

Comment cela?

get
{
   if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
   {
      return _payout /100;
   }
   return _payout;
}
set{_payout = value;}

Alors que vous ne changez pas la valeur définie.

Autres conseils

  

Comment forcer le PayoutType à régler avant PayoutValue est évaluée?

Mettre dans le constructeur. C'est la seule façon de faire respecter cette règle.

Cela étant dit, je recommanderais contre cela, au moins dans votre mise en œuvre ci-dessus. Votre mise en œuvre actuelle de la propriété sera très, très déroutant pour les utilisateurs. Les gens ont tendance à attendre à ce que définir une propriété, puis aller chercher immédiatement fournira la même valeur.

Dans votre cas, si:

decimal value = 45.3;
myObject.PayoutValue = value; // Set this

if (myObject.PayoutValue != value)
{
    // This would normally be a very unexpected case!  In your example, it will always be true!
}

Il serait préférable d'utiliser deux propriétés potentiellement, ou une méthode. (Ex: SetPayoutValue(decimal value)) pour l'indice utilisateur dans le fait que ce n'est pas agir comme une simple propriété

Toutes les propriétés « nécessaires » devrait être dans le constructeur de votre classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top