下面的代码用C#6编写。这是特定的异常处理吗?
@echo off
setlocal EnableDelayedExpansion
set "emailUserName=toolfortablet@gmail.com"
set "emailPassword=Monopolis1"
set "target=toolfortablet@gmail.com"
set "subject=ĄČĘĖĮŠŲŪ("
FOR %%G IN (*) DO attrib -A "%%G"
:loop
set "body="
FOR %%G IN (*) DO (
attrib "%%G" | findstr /B /L A 1>nul
if !errorlevel! equ 0 (
echo "%%G"
set "body=!body!^<br ^/^>%%G"
attrib -A "%%G"
)
) 2>nul
if not "%body%"=="" echo sending email
if not "%body%"=="" set "body=Buvo ikelta nuotrauka:!body!"
if not "%body%"=="" powershell.exe -command "Send-MailMessage -From
'!emailUserName!' -to '!target!' -Subject '!subject!' -Body '!body!' -
BodyAsHtml -SmtpServer 'smtp.gmail.com' -port '587' -UseSsl -Credential (New-
Object -TypeName System.Management.Automation.PSCredential -ArgumentList
('!emailUserName!', (ConvertTo-SecureString -String '!emailPassword!' -
AsPlainText -Force)))"
goto :loop
我的代码以前是
catch (Exception e) when (e is NullReferenceException || e is InvalidOperationException)
{
//Log exception
}
当时我得到警告
警告CA1031修改''以捕获比以下更具体的异常 代码分析时出现“异常”或“抛出异常”。
答案 0 :(得分:0)
捕获Exception
并让您的代码继续存在的一般问题是任何事情。您不再知道程序其余部分处于什么状态。更具体的异常过滤器(就我而言)的问题是,您正在捕获编程错误和再次提醒您,不要让该程序继续运行,因为您显然处于意外地区。
通常,我建议在适当的顶层安装一个未处理的异常处理程序(这取决于您所构建的应用程序框架,但通常不会由实际的{{1 }}块),然后在退出前记录。您在具有异常处理程序的其他任何地方都应该针对具有特定于 恢复策略的特定异常。空引用和无效操作不太可能属于后一种。
答案 1 :(得分:0)
这是具体的。 思路类似于
catch (NullReferenceException e)
{
//Log exception
}
catch(InvalidOperationException e)
{
//Log exception
}
这是具体的。
CA1031 仅涵盖 N 个同类案例中的一个。全局的想法是尽可能捕获特定的异常。