Domanda

Ho un immobile in questo modo:

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;
            }
        }
    }

Come si può vedere, è dipende dal valore di PayoutType, che è solo una proprietà enum semplice:

public CutType PayoutType { get; set; }

Il mio problema è che PayoutType non sembra per avere istituito prima PayoutValue è impostato, in modo che il condizionale qui sotto non è mai vero. Come faccio a forzare il PayoutType da impostare prima di PayoutValue viene valutato?

Grazie.

UPDATE Grazie per le vostre risposte ragazzi. Credo che dovrei già detto che la maggior parte del tempo questo oggetto è legato tramite DataContexts o da un Http.Post dal mio lato client (progetto MVC), quindi in realtà non hanno alcun costruttore. C'è un altro modo, o devo iniziare a ricevere creativo con la mia programmazione?

È stato utile?

Soluzione

Che ne dici di questo?

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

In modo che non si modifica il valore che è stato impostato.

Altri suggerimenti

  

Come faccio a forzare il PayoutType da impostare prima di PayoutValue viene valutato?

Mettilo nel costruttore. Questo è l'unico modo per far rispettare questa regola.

Detto questo, mi sento di raccomandare contro questo, almeno nell'implementazione sopra. L'implementazione attuale proprietà sarà molto, molto confusa per gli utenti. Le persone tendono ad aspettarsi che l'impostazione di una proprietà, poi subito il recupero fornirà lo stesso valore.

Nel tuo caso, però:

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!
}

Sarebbe molto meglio utilizzare potenzialmente due proprietà, o un metodo. (Es: SetPayoutValue(decimal value)) per indizio all'utente nel fatto che non comporta come una semplice proprietà

Tutte le proprietà "necessaria" dovrebbe essere nel costruttore della classe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top