那麼把程式碼改一下:
// string myString = "1234";
string myString = null;
int myint = 0;
myint = Convert.ToInt32(myString);
Console.Write(myint + "\r\n");
myint = Int32.Parse(myString);
Console.Write(myint + "\r\n");
Int32.TryParse(myString, out myint);
Console.Write(myint + "\r\n");
這次字串是 null,執行結果怎樣?(程式將會異常!)
因為解析錯誤時:
Convert.ToInt32() 在 null 時不拋異常回傳 0;Int32.Parse() 會拋異常;Int32.TryParse() 不拋異常,回傳 true/false 說明是否成功,失敗時調用方得到 0 值。由於 Convert.ToInt32() 在 null 時看不到 Int32.TryParse() 結果,再分調試與不調試看差異:
調試:(將看到 TryParse 回傳 false,圖略)
一般出 bug 屬少數,大家都會測試保證不出 bug,最關心或許是效能。
再修改程式碼:
string myString1 = "1234";
int myint = 0;
Console.Write(DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString() + " ");
for (int i = 0; i < 1000000; i++)
myint = Convert.ToInt32(myString1);
Console.Write(myint + " \r\n");
Console.Write(DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString() + "\r\n ");
string myString2 = "1234";
for (int i = 0; i < 1000000; i++)
myint = Int32.Parse(myString2);
Console.Write(myint + "\r\n ");
Console.Write(DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString() + " ");
string myString3 = "1234";
for (int i = 0; i < 1000000; i++)
Int32.TryParse(myString3, out myint);
Console.Write(myint + "\r\n ");
Console.Write(DateTime.Now.ToString() + " " + DateTime.Now.Millisecond.ToString() + "\r\n ");
(執行效果圖略,所耗時間基本相差不遠)