2013年12月22日 星期日

[C#]Convert(轉型)與Int32(強制轉型)的差別、效能

寫程式時常遇到文字轉換成數字,
或是某個資料型別轉成資料型別,
轉型別基本上分為兩種,

//其一為轉型
Console.WriteLine(Convert.ToInt32("5.5"));
//其二為強制轉型
Console.WriteLine((int)(5.5));
但是以上兩種答案卻是不一樣的!!!
所以千萬不可亂用,
小弟就稍微分析一下該兩者不同點,
以及性能上該如何使用較好。
小弟最近就是被這種小小細節...,常常誤會自己的邏輯有問題。

以上範例答案:

根據MSDN可以知道,
Convert是將值轉換成最接近的 32 位元帶正負號的整數,

Console.WriteLine(Convert.ToInt32("4.5")); //result = 4
Console.WriteLine(Convert.ToInt32("4.51"));//result = 5
Console.WriteLine(Convert.ToInt32("5.4")); //result = 5
Console.WriteLine(Convert.ToInt32("5.5")); //result = 6
強制轉型則是無條件捨去( long、float、double、或 decimal ),
Console.WriteLine((int)(4.5)); //result = 4
Console.WriteLine((int)(4.51));//result = 4
Console.WriteLine((int)(5.4)); //result = 5
Console.WriteLine((int)(5.5)); //result = 5
用途上有所差異,必須警慎使用;
效能上小弟利用迴圈各跑10000次,
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DifferentInt32AndConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            int temp = 0;
            Stopwatch sw = new Stopwatch();
            sw.Reset();
            sw.Start();
            for (int i = 0; i < 10000; i++)
            {
               temp = Convert.ToInt32(5.5);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed.TotalMilliseconds.ToString());
            sw.Reset();
            sw.Start();
            for (int i = 0; i < 10000; i++)
            {
                temp = (int)(5.5);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed.TotalMilliseconds.ToString());
        }
    }
}
結果:Int32 花費時間較短,效能比較好。

沒有留言:

張貼留言