Có vẻ như mô hình đối tượng của bạn không được tính đúng. Những gì bạn có thể muốn làm là trừu tượng Unit
và Quantity
thành một đối tượng khác và sau đó bạn có thể ghi đè lên ToString
cho điều đó. Điều này có lợi thế là giữ các giá trị phụ thuộc với nhau và cho phép bạn triển khai những thứ như chuyển đổi giữa các đơn vị trong tương lai (ví dụ: chuyển đổi từ inchest sang feet, v.v.), ví dụ:
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);
}
}
Lưu ý rằng tôi đã tạo Measure
cấu trúc ở đây vì nó có thể có ngữ nghĩa giá trị. Nếu bạn sử dụng phương pháp này, bạn nên làm cho nó không thay đổi và ghi đè Equals/GetHashCode là thích hợp cho một cấu trúc.
Nguồn
2009-05-06 11:52:09
Wow rất nhiều giải pháp!Chọn một câu trả lời trở nên thực sự khó khăn, như IMO, nhiều giải pháp được đề xuất có vẻ chính xác và hữu ích. Hai điểm: 1. Hiện có giao diện người dùng. Tuy nhiên, tôi vẫn muốn làm điều đó "định dạng" bên trong đối tượng, bởi vì nó có vẻ như là vốn có của đối tượng đó, để trả về số lượng của nó cùng với các đơn vị, khi không tham gia vào một số tính toán. 2. Bây giờ, tôi đang đi với giải pháp của Fredrik, vì nó đang cung cấp cho tôi một tài sản sẵn sàng để sử dụng mới, mà không có "phức tạp" của một đối tượng mới cho số lượng + đơn vị. – virtualmic
@virtualmic - Đây có thể là giải pháp đơn giản nhất nhưng tôi không nghĩ đó là giải pháp đúng. Bạn sẽ phải trả thuế bảo trì của các mối quan tâm pha trộn tại một số điểm. –
Cảm ơn bạn Greg, bạn quan tâm. Tôi chắc chắn sẽ thử các cách tiếp cận khác nữa, như bạn và Anton đã gợi ý. Cảm ơn một lần nữa, tất cả mọi người! – virtualmic