C#异常处理不会破坏应用程序

时间:2019-12-19 19:05:12

标签: c# exception try-catch try-catch-finally

我是一个绿色的C#程序员,我正在尝试向应用程序添加异常处理,但是不确定要获得所需结果的正确方法。我正在解析CSV并获取始终位于同一位置的值。如果出现空白或格式错误的文件,它将导致应用程序崩溃,我想防止这种情况。如果发生异常,而不是存储文件中的值,我想在字符串变量中存储单个空格字符。这是我的代码:

using (StreamReader inputGetData = new StreamReader(filename.FullName))
            {
                //STORE DATA STRIPPED FROM MDT FILE
                lotID = inputGetData.ReadLine().Split(',')[2];
                exatronFile = inputGetData.ReadLine().Split(',')[2];
                rofinFile = inputGetData.ReadLine().Split(',')[2];
                lotQty = inputGetData.ReadLine().Split(',')[2];
                serialize = inputGetData.ReadLine().Split(',')[2];
                serialStart = inputGetData.ReadLine().Split(',')[2];
                serialInc = inputGetData.ReadLine().Split(',')[2];
                partNum = inputGetData.ReadLine().Split(',')[3];
                inputGetData.ReadLine();
                dieMNF = inputGetData.ReadLine().Split(',')[3];
                assemblySub = inputGetData.ReadLine().Split(',')[3];
                countryOrigin = inputGetData.ReadLine().Split(',')[3];
                dateCode = inputGetData.ReadLine().Split(',')[3];
                QMLcomp = inputGetData.ReadLine().Split(',')[3];
                prefix = inputGetData.ReadLine().Split(',')[3];
                serialNum = inputGetData.ReadLine().Split(',')[3];
                suffix = inputGetData.ReadLine().Split(',')[3];
                inputGetData.ReadLine();
                packageCode = inputGetData.ReadLine().Split(',')[1];

因此,理想情况下,我想尝试每一行,如果发生异常,将其捕获,将其扔给更高级别的日志记录方法,然后将''存储到变量中。如果我将最后一部分放到finally块中,即使没有发生正确的异常,它也将始终运行?我该如何实现?

2 个答案:

答案 0 :(得分:0)

如评论中所建议,有些软件包可以简化您的生活。

如果您想用困难的方式做事(不反对:p),则可以始终通过使用(甚至是本地)函数添加中间步骤:

    string Extract(string s, int position)
    {
        var split = s.Split(',');
        return split.Length > position ? split[position] : " ";
    }

    lotID = Extract(inputGetData.ReadLine(), 2);

答案 1 :(得分:0)

您可以对每个分配使用以下函数调用:

public T TryCatch<T>(Func<T> tryCatched, T returnedOnFailure)
{
    try
    {
        return tryCatched();
    }
    catch
    {
        return returnedOnFailure;
    }
}

如果您想收集有关发生的异常的信息,则可以将out Exception exception作为最后一个参数。

要调用它,只需针对您的情况lotID = TryCatch(() => inputGetData.ReadLine().Split(',')[2], " ");