我是一个绿色的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块中,即使没有发生正确的异常,它也将始终运行?我该如何实现?
答案 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], " ");