using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
object o2 = null;
try
{
int i2 = (int)o2;
Console.WriteLine(i2);
}
catch (System.NullReferenceException e)
{ Console.WriteLine(e); }
catch (InvalidCastException e)
{ Console.WriteLine(e); }
catch
{ Console.WriteLine("Error"); }
}
}
在小弟的理解 Try內有出現錯誤的話,可以透過Catch抓到
可是 執行到try裡面,都不會跳到下面的catch內
原本是想試試看(NullReferenceException)這個他執行時會出現的狀況
可是即使在Catch內還是會錯誤,不知道是怎麼回事
後續加上空catch還是報錯誤,還請各位大大幫解惑
錯誤截圖如下
![]
你的程式碼其實完全沒有錯 XDDD
會跳出錯誤訊息,是因為你勾了「於擲回這個例外狀況類型時中斷」造成的 ㄏㄏ
原來是我不熟悉VS2019的問題
我發現其實可以執行下去
看到順便提醒你樓下huanwen所說的:
在Catch的時候,如果你要印出Exception
建議不要直接使用e,將e轉成字串,或輸出e.Message
// 以字串輸出Exception,語意上比較清楚
Console.WriteLine(e.ToString());
// 只輸出Exception的訊息文字
Console.WriteLine(e.Message);
另外,如果你要將其他型別的變數,轉成int
在C#建議使用 Convert.ToInt32
int castNum = Convert.ToInt32(o2);
這些是關於型態的習慣。
可在最後加個 finally
既不是try也不是catch
try{
}
catch{
}
finally{
}
參考https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/try-finally
加了
可是錯誤還是會跳出來
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
object o2 = null;
try
{
int i2 = (int)o2;
Console.WriteLine(i2);
}
catch (System.NullReferenceException e)
{ Console.WriteLine(e); }
catch (InvalidCastException e)
{ Console.WriteLine(e); }
catch
{ Console.WriteLine("Error"); }
finally
{ Console.WriteLine("finally"); }
}
}
這是因為你把Exception印出來了,但Catch裡面也是會發生例外錯誤,所以通常都是在Catch裡面做LOG
public static void Main(string[] args)
{
object o2 = null;
try
{
int i2 = (int)o2;
Console.WriteLine(i2);
}
catch(Exception ex)
{
//Console.WriteLine(ex);
//throw ex;
//throw new NullReferenceException();
//上面都會有錯誤
Console.WriteLine("Error:" + ex.Message); // log message
}
finally
{
Console.WriteLine("finally");
}
}