Cast 和 Convert 的區別 c#

1. Cast是指同類型的轉換,例如數字類型互相轉換,int ->double

分為兩種
1.implicit  : 從小轉成大

我們都知道int為32bit,而double為64bit,如果把int轉乘double,則沒有影響,因為double可以存int不會失去掉任何東西

         int major = 5;
         double i = major;

2.explicit  :  從大轉成小

如果相反從double要轉成int,這時候就會發生漏失資訊的事情
         
double major = 5.55;
int i = major; //會提示說不能implicit轉換,只能用explicit轉換

因為會漏失資訊,上面的例子會把.55給遺失掉,只會得到5
如果是在需要比較精密的系統,財務系統之類的,漏掉這.55可能就不得了了
所以會提示要你自己來轉換,讓你自己知道這會造成遺漏

至於要如何explicit轉換呢?

請在要轉換的數字前面加上 括號裡面放要轉的型態   (int)

延續上面的例子
double major = 5.55;
int i = (int)major;
以上就不會報錯了


___________________________________________________________

2.Convert則為不同類型的轉換,例如把int轉換成string,其實也能支持同類型的轉換
如int轉成double,只支援小->大

如果你寫
int i =1;
string s = (string) i; //這時候會報錯 會提示不能夠把int轉換成string 不能像上面一樣強制轉換
double變int

這時候就需要用到Convert類別
他裡面有很多方法,可以進行各種轉換

int i = 1;
string s = Convert.ToString(i);  //成功!~~~(灑花)

我們可以發現float轉換成int,其實可以用 cast 和 Convert方法
但這個前提是float的數字要比較小,如果他超越了int的最大值,則Convert方法會報錯
如下:

float f = 1555555555555555555555555F;
int i = Convert.ToInt32(f);

但以下這個卻可以成功轉換!
  float f = 15555F;
  int i = Convert.ToInt32(f);

而使用cast方法,如下,則不會報錯,但得到的結果會非常奇怪 ! 跟1555555555是完全不同的值

float f = 15555555555555F;
 int i = (int)f;




留言

這個網誌中的熱門文章

刪除大量資料造成Lock escalation鎖定升級 SQL Server

避免登出後,讀取快取返回上一頁。 How to prevent seeing previous page after logout?

SAP Connector for Microsoft .NET 3.0-------Cannot convert String into DATE/TIME