Tôi có một lớp với nhiều trường đại diện cho các giá trị vật lý khác nhau.Cách thanh lịch để xác thực giá trị
class Tunnel
{
private double _length;
private double _crossSectionArea;
private double _airDensity;
//...
Mỗi trường được hiển thị bằng thuộc tính đọc/ghi. Tôi cần phải kiểm tra trên setter rằng giá trị là chính xác và tạo ra ngoại lệ khác. Tất cả các xác thực là tương tự:
public double Length
{
get { return _length; }
set
{
if (value <= 0) throw new ArgumentOutOfRangeException("value",
"Length must be positive value.");
_length = value;
}
}
public double CrossSectionArea
{
get { return _crossSectionArea; }
set
{
if (value <= 0) throw new ArgumentOutOfRangeException("value",
"Cross-section area must be positive value.");
_crossSectionArea = value;
}
}
public double AirDensity
{
get { return _airDensity; }
set
{
if (value < 0) throw new ArgumentOutOfRangeException("value",
"Air density can't be negative value.");
_airDensity = value;
}
}
//...
Có cách nào thanh lịch và linh hoạt để thực hiện việc xác thực như vậy không?
Tôi nghĩ rằng cách bạn đã thực hiện nó là con đường đúng để đi. Thay đổi duy nhất có thể là tạo một 'hàm validator' mà bạn gọi bất cứ khi nào bạn sẵn sàng kiểm tra * tất cả * các giá trị của bạn cùng một lúc. Theo kinh nghiệm của tôi, Visual Studio (không biết những gì bạn đang sử dụng) dường như nuốt các ngoại lệ xảy ra trong một setter tài sản. – jp2code
@ jp2code, ngoại lệ trong setter hoạt động tốt. Mới kiểm tra. –