自己先前写了一个关于批改HTML文件的简单程序,觉得有必要记录下一些经验和教训:
一、C#中try……catch……finally
try
{
可能抛出异常的语句
}
catch(异常类型)
{
抛出异常时的处理方法,可以分类处理
//if
//else if
//else
}
finally
{
不管抛出异常与否,都会执行的语句
可以将出现异常的结果放在这里判断处理
}
例如:
HtmlNodeCollection titleNodes = null;
HtmlNodeCollection styleNodes = null;
try
{
titleNodes = htmlDoc.DocumentNode.SelectNodes(@"/html/body/*");//获得body的第一个子元素
//获取css样式表设置值
styleNodes = htmlDoc.DocumentNode.SelectNodes(@"/html/head/style");//获得style,css样式设置标签
}
catch(NullReferenceException ex)//出现的情况只可能是css样式表没有
{
if (styleNodes == null)
{
WordInsert(para, "Html文件中没有CSS样式文件!" + ex.ToString());
}
if (titleNodes == null)
{
WordInsert(para, "Html文件中没有文本文件!" + ex.ToString());
}
}
finally
{
Regex titleName = new Regex("h[1-6]");//得到标题是h1,h2……
if (titleNodes == null)
{
WordInsert(para, "插入标题文本不成功");
ExcelInsert(excel, "0", row++, column);
WordInsert(para, "居中对齐设置不正确!");
ExcelInsert(excel, "0", row++, column);
WordInsert(para, "字体黑色设置不正确!");
ExcelInsert(excel, "0", row++, column);
WordInsert(para, "字体大小设置不正确!");
ExcelInsert(excel, "0", row++, column);
WordInsert(para, "字体颜色设置不正确!");
ExcelInsert(excel, "0", row++, column);
}
else
{
……//没有出现异常的执行语句
}
}
还需要注意的是,在try中可能出现NullReferenceException异常的变量,要在try之前声明,否则在后面的catch和finally语句中就不能调用这个变量!
二、从字符串中提取汉字
Regex nameRe = new Regex("[\u4E00-\u9FFF]+");//\u4E00-\u9FFF是包括繁体的汉字,\u4E00-\u9FA5是简体汉字
三、判断一个字符串中是否包含一个子字符串
IndexOf(string)>= 0,表示包含!最好不要用IndexOf(string)!= 0,因为如果子字符串刚好在首部,而判断为不包含!
四、事务逻辑
根本就没有这个选项、有这个选项但是值却是错误的、有这个选项并且值也是正确的!(老是忘记没有这个选项这个逻辑)