当试图将字符串地理坐标转换为double时,在活动环境中检测到一个错误。
当前的文化(hu-HU)用逗号代替小数的点,这在解析Double.Parse(47,545874)时产生了一个异常,这就是为什么我要使用CultureInfo.InvariantCulture,以及将转换包装在try/catch语句中的原因。
是否有更好的方法来处理这些异常?
public void UpdateJobGeoCoordinates(Job job)
{
var address = _kernel.GetKernel();
var gpsCoordinate = _locator.GetGpsCoordinates(address);
try
{
job.Lat = Double.Parse(gpsCoordinate.Item1, CultureInfo.InvariantCulture);
job.Lng = Double.Parse(gpsCoordinate.Item2, CultureInfo.InvariantCulture);
}
catch (FormatException)
{
ResetCoordinates(job);
Logger.Warn("Geo location issue for Job [{0}] , Format error when convert '{1}', '{2}' to a Double.", job.ERPServiceOrderId, gpsCoordinate.Item1, gpsCoordinate.Item2);
}
catch (OverflowException)
{
ResetCoordinates(job);
Logger.Warn("Geo location issue for Job [{0}] , Overflow when convert '{1}', '{2}' to a Double.", job.ERPServiceOrderId, gpsCoordinate.Item1, gpsCoordinate.Item2);
}
catch (Exception ex)
{
ResetCoordinates(job);
Logger.Warn("Geo location issue for Job [{0}] , Exception message: {1}", job.ERPServiceOrderId, ex.Message);
}
}发布于 2015-05-08 09:51:23
我觉得你把这件事搞得太复杂了。在我看来,你关心的是你是否成功,然后想要把尽可能多的信息传递给那些能够找出问题所在的人。try块中仅有的两行是解析成双行,所以只需捕获Exception并增强所包含的信息。
public void UpdateJobGeoCoordinates(Job job)
{
var address = _kernel.GetKernel();
var gpsCoordinate = _locator.GetGpsCoordinates(address);
try
{
job.Lat = Double.Parse(gpsCoordinate.Item1, CultureInfo.InvariantCulture);
job.Lng = Double.Parse(gpsCoordinate.Item2, CultureInfo.InvariantCulture);
}
catch (Exception ex)
{
ResetCoordinates(job);
Logger.Warn("Geo location issue for Job [{0}] , Exception details: {1}", job.ERPServiceOrderId, ex);
}
}请注意,Exception.ToString()比消息更有用。
您将得到异常的类型、消息和堆栈跟踪。
https://codereview.stackexchange.com/questions/88872
复制相似问题