了解所有异常类型及其用于编写好代码的目的重要吗?
我在Google上搜索了很多,但是在异常处理方面仍然有些困惑。有什么好的例子吗?
一般异常:
try{
//some code
}
catch(Exception e){
//print e
}
//that's it.
多次捕获
try{
//some code
}
catch(IOException e){
}
catch(SQLException e){
}
答案 0 :(得分:1)
1。为什么即使我们可以编写一个通用异常也需要多个“ catch”块?
有时您可能需要指定导致问题的原因。
例如,
try {
...
} catch(IOException e) {
// Print "Error: we cannot open your file"
} catch(SQLException e) {
// Print: "Error: we cannot connect to the database"
}
使用不同的错误,用户可以轻松地了解出了什么问题。
如果我们一起去
try {
...
} catch(Exception e) {
// Print "Error: " + e.
}
用户很难找出问题所在。
此外,如果我们使用多个catch
-es,我们可以根据错误将用户发送到不同的页面。
2。了解所有异常类型及其用于编写良好代码的目的是否重要?
我个人会考虑一些重要的异常,例如IO,DB等,这些异常会引起严重的麻烦。对于其他人,我会遇到一个普遍的例外。
答案 1 :(得分:1)
使用多个异常有几个优点:
例如:您可以抛出自定义异常。
这是您的服务代码:
public void Login(string username, string password)
{
if(string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
{
throw InvalidUserNameException();
}
if(!IsInternetAvaialable())
{
throw NoInternetAvailableException()
}
else
{
//Implement though your login process and if need use various custom exceptions or throw the exception if occurs.
}
}
public class InvalidUserNameException : Exception
{
public InvalidUserNameException()
{
}
public InvalidUserNameException(string message)
: base(message)
{
}
public InvalidUserNameException(string message, Exception inner)
: base(message, inner)
{
}
}
呼叫者方法:
try {
...
} catch(InvalidUserNameException e) {
// Show Alert Message here
} catch(NoInternetAvaibleException e) {
// Show Alert Message with specific reason
}
catch(Exception e) {
// Other Generic Exception goes here
}
参考: https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions