c# - 有没有更好的方法来处理转换异常?

标签 c# exception-handling casting

考虑以下函数:

public enum Operator
{
    EQUAL = 1,
    GREATER_THAN = 2
}

public class checkString
{
    public static bool isValid(string inputString, string checkString, Operator operation)
    {
        switch (operation)
        {
            case Operator.EQUAL:
                if (inputString == checkString)
                    return true;

                break;

            case Operator.GREATER_THAN:

                // Numeric check for greater than
                try
                {
                    double inputDouble, checkDouble;

                    inputDouble = Convert.ToDouble(inputString);
                    checkDouble = Convert.ToDouble(checkString);

                    if (inputDouble > checkDouble)
                        return true;
                }
                catch (Exception) 
                { }

                // Date check for greater than
                try
                {
                    DateTime inputDate, checkDate;

                    inputDate = DateTime.Parse(inputString);
                    checkDate = DateTime.Parse(inputString);

                    if (inputDate. > checkDate)
                        return true;
                }
                catch (Exception)
                { }

                break;
        }
        return false;
    }
}

参数

  • inputString:我们要评估的内容
  • checkString:输入必须根据其进行评估的标准(值)
  • 运算符:我们要执行的操作的枚举

其他需要知道的事情

  • 文件中的每一行都根据此方法进行评估,以在满足条件时返回
  • 评估文件中记录的过程逐行检查,在一个实例中它等于条件。它还可以检查同一行是否也大于条件。检查完成后,它将移至下一条记录
  • 除了任何默认设置外,没有连接其他事件监听器,我不会将额外数据推送到调试或跟踪日志

问题

在这个过程的任何时候,我都不知道人们要评估什么,但我需要能够检查“某物”(不管是什么)等于、大于或小于其他东西。当然,我检查了其他东西,但我已经大大简化了这个功能。

也就是说,使用 EQUAL 或 NOT_EQUAL 可以尽可能快地运行,根据上述标准非常快速有效地处理非常大的文件中的记录。一旦我添加了 GREATER_THAN 逻辑,它就变慢了……以至于处理 20 meg 的文件需要几分钟,而过去最多需要半分钟。

据我所知:

  • 到处都会抛出异常。不能保证字段将是数字或日期类型。所以我必须尝试转换为这些数据类型以尝试评估条件
  • 当抛出异常时,控制台会在我没有指示它这样做的地方获得输出,这是一种自动化

是的,我在这方面缺乏经验,我希望了解更多关于异常处理以及幕后真正发生的事情,因为当其他 80% 的记录不是数字时,20% 的记录中有很多异常meg,8万条记录文件。

是否有更好的方法来处理转换本身以提高效率?我见过 double.Parse/TryParse 并且可以直接在前面进行转换,但我不确定哪个最有用。

最佳答案

使用double.TryParseDateTime.TryParse而不是 Convert.ToDoubleDateTime.Parse分别。

示例:

double result;

if (double.TryParse(someString, out result))
{
    Console.WriteLine(result);
}
else
{
    // not a valid double
}

关于c# - 有没有更好的方法来处理转换异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971568/

相关文章:

Scala 方式来处理 for-comprehensions 中的条件?

python - 如何测试自定义 excepthook 是否已正确安装?

c++ - clang try catch 失败

C# Selenium 浏览器错误 : cannot convert from 'System.Drawing.Imaging.ImageFormat' to 'OpenQA.Selenium.ScreenshotImageFormat'

c# - 将 List<List<object>> 转换为 List<List<string>>

c# - 检查两个对象的属性以进行更改

c++ - 服务定位器实现

c - 在 C 中键入强制地址

c - 转换和取消引用 void* 时出现段错误

c# - 一个类(class)的鼠标事件,我如何在另一个类(class)收听它?