Pregunta

Tengo una propiedad de esta manera:

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

Como se puede ver, que depende del valor de PayoutType, que es sólo una propiedad simple enumeración:

public CutType PayoutType { get; set; }

Mi problema es no parece conseguir el sistema antes de haber ajustado PayoutType, por lo que el condicional a continuación no es cierto que PayoutValue. ¿Cómo fuerzo la PayoutType ser establecido antes de evaluar PayoutValue?

Gracias.

Actualizar Gracias por sus respuestas chicos. Creo que debería haber mencionado que la mayoría de las veces, este objetivo se une a través de DataContexts o de un Http.Post de mi lado del cliente (proyecto MVC), así que realmente no tienen ningún constructor. ¿Hay alguna otra manera, o debería comenzar a conseguir creativo con mi programación?

¿Fue útil?

Solución

¿Qué tal esto?

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

Para que no se cambia el valor que se estableció.

Otros consejos

  

¿Cómo fuerzo la PayoutType para ser puesto delante de PayoutValue se evalúa?

Póngalo en el constructor. Esa es la única manera de hacer cumplir esta norma.

Una vez dicho esto, yo recomendaría contra esto, al menos en su implementación anterior. Su aplicación actual de la propiedad va a ser muy, muy confuso para los usuarios. La gente tiende a esperar que el establecimiento de una propiedad, a continuación, ir a buscar de inmediato que proporcionará el mismo valor.

En su caso, sin embargo:

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

Sería mucho mejor usar potencialmente dos propiedades, o un método. (Es decir: SetPayoutValue(decimal value)) a la pista al usuario en el hecho de que no está actuando como una propiedad simple

Todas las propiedades requeridas "" debe estar en el constructor de la clase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top