Tôi gặp sự cố khi TryParse hoạt động chính xác cho tôi. Tôi có một danh sách các giá trị mà tôi gần như chắc chắn là hợp lệ (khi chúng đến từ một thành phần khác trong hệ thống của chúng tôi) nhưng tôi muốn đảm bảo có lỗi xử lý đúng tại chỗ.TryParse thất bại với số âm
Dưới đây là một danh sách ví dụ về giá trị của tôi:
20,00
20,00
-150,00
Và đây là phương pháp tôi ban đầu đã viết:
private decimal CalculateValue(IEnumerable<XElement> summaryValues)
{
decimal totalValue = 0;
foreach (XElement xElement in summaryValues)
{
decimal successful;
Decimal.TryParse(xElement.Value, out successful);
if (successful > 0)
totalValue += Decimal.Parse(xElement.Value);
}
return totalValue;
}
Biến 'thành công' đã trả về false cho -150,00, vì vậy tôi đã thêm NumberStyles:
private decimal CalculateValue(IEnumerable<XElement> summaryValues)
{
decimal totalValue = 0;
foreach (XElement xElement in summaryValues)
{
decimal successful;
Decimal.TryParse(xElement.Value, NumberStyles.AllowLeadingSign, null, out successful);
if (successful > 0)
totalValue += Decimal.Parse(xElement.Value, NumberStyles.AllowLeadingSign);
}
return totalValue;
}
Tuy nhiên, bây giờ tôi có NumberStyles trong đó, không có số nào sẽ phân tích cú pháp! Tôi cảm thấy tốt khi có IFormatProvider được đặt thành null vì đây là tất cả trong hệ thống của chúng tôi. Có ai nhìn thấy những gì tôi có thể làm sai?
Tại sao các bạn phân tích nó hai lần? – SLaks