Parece que su modelo de objetos no está correctamente factorizado. Lo que probablemente desee hacer es abstraer Unit
y Quantity
en otro objeto y luego puede anular ToString
para eso. Esto tiene la ventaja de mantener juntos los valores dependientes y de permitirle implementar cosas como conversiones entre unidades en el futuro (por ejemplo, conversión de inchest a feet, etc.), p.
public struct Measure
{
public Measure(string unit, decimal quantity)
{
this.Unit = unit;
this.Quantity = quantity;
}
public string Unit { get; private set; }
public decimal Quantity { get; private set; }
public override string ToString()
{
return string.Format("{0} {1}", this.Quantity, this.Unit);
}
}
public class Item
{
public string Name { get; set; }
public Measure Measure { get; set; }
public override string ToString()
{
return string.Format("{0}: {1}", this.Name, this.Measure);
}
}
Tenga en cuenta que he cometido Measure
una estructura aquí, ya que probablemente tiene la semántica de valor. Si toma este enfoque, debe hacerlo inmutable y anular Equals/GetHashCode, como es apropiado para una estructura.
¡Vaya tantas soluciones!Elegir una respuesta se vuelve realmente difícil, como IMO, muchas de las soluciones sugeridas parecen correctas y útiles. Dos puntos: 1. Hay una IU, por ahora. Sin embargo, aún quiero hacer ese "formateo" dentro del objeto, porque parece ser tan inherente a ese objeto, devolver su cantidad junto con la unidad, cuando no estoy involucrado en algunos cálculos. 2. Por ahora, voy con la solución de Fredrik, ya que me proporciona una nueva propiedad lista para usar, sin los "inconvenientes" de un nuevo objeto para cantidad + unidad. – virtualmic
@virtualmic - Puede ser la solución más simple, pero no creo que sea la correcta. Tendrá que pagar el impuesto de mantenimiento de las preocupaciones de mezcla en algún momento. –
Gracias Greg, por tu preocupación. Definitivamente probaré otros enfoques también, como tú y Anton han sugerido. Gracias de nuevo, ¡a todos! – virtualmic