C 中的資料型別裝換

2021-06-21 13:51:06 字數 1697 閱讀 5412

1. 強制轉換

e.g.:

(int)table1.rows["id"][0];這種轉換在程式設計中不建議使用,是一種裝箱拆箱的過程,就是說被轉換型別本身必須是將要轉換成的那種型別,否則必然出錯;

e.g.:

object objtest = new newtype();

newtype newvalue = (newtype)objtest;

2. convert

該類基本支援所以型別之間的轉換。但也要求轉換型別本身必須是將要轉換成的那種型別,否則也會出錯;

e.g.:

convert.toint32(table1.rows["id"][0]);

3.      datatype.parse()

note

:上述3

種方法是不安全的,需要用

try-catch

語句來進行保護。

4.      datatype.tryparse(),如果轉換不成功,會直接給目標變數賦初值。

e.g.:

decimal p1;

decimal.tryparse("{}", out p1);

5. as

e.g.:

object objtest = new newtype();

newtype newvalue = objtest as newtype;

對於as操作符來說,它不會做過的轉換操作,當需要轉換物件的型別屬於轉換目標型別或者轉換目標型別的派生型別的時候,那麼此轉換操作才能成功,而且並不產生新的物件。因此用as來進行型別轉換使安全的。

為什麼用

as操作符進行型別轉換的效率要高於老式的型別轉換的,因為用

as操作符進行轉換就如前面所說的,首先判斷當前物件的型別,當型別滿足要求後才進行轉換。而傳統的型別轉換方式,是用當前物件直接去轉換,而且為了保護轉換成功,要加上try-catch,這就決定了它的效率不會高於as操作符的效率。

要注意的時候,不管用傳統方式,還是用as操作符進行型別轉換之後,在使用之前,需要進行判斷轉換是否成功,如下:

if( newvalue!= null )

note:使用as操作符有如下幾點限制。

(1)不用在型別之間進行型別轉化,即如下編寫就會出現編譯錯誤。

newtype newvalue = new newtype();

newtype1 newvalue = newvalue as newtype1;

(2)不能應用在值型別資料,即不能如下寫(也會出現編譯錯誤)。

object objtest = 11;

int nvalue = objtest as int;

對於第一點所提的,可以用傳統的型別轉換方式來完成,但是光用如下的方式,是不能正確完成。

newtypeone newtestone = new newtypeone();

newtypetwo newtesttwo = (newtypetwo)newtestone;

但是光如上寫是不能完成的,要想使如上的操作能正確完成,在原有型別中增加型別轉換操作符函式,即需要完成類似如下的**。

public class newtypeone

}對於第二點所提的,在c#中可以使用is操作符,再加上老式的型別轉換操作,就可以安全完成轉換,那麼要完成如上操作,正確的寫法如下。

object objtest = 11;

if( objtest is int )

資料型別裝換

從左到右的轉換稱為 轉換,從右到左的轉換陳偉強制轉換,也可以這麼理解,從左到右,資料型別的表示範圍越來越大,可以看做容器變大,把乙個小容器中的資料放在乙個大容器中,毫無疑問是可以全部放進去的,而從乙個大容器把資料放進乙個小容器中,資料就有可能溢位,導致資料的精度下降。byte,short,char ...

C 型別裝換 分支

datetime dt new datetime 2017,6,7,13,56,0 獲取輸入的時間 console.writeline dt 去掉line在一行顯示 datetime dt now date.now 獲取現在的時間 console.writeline dt now string dt...

js中相關型別裝換

parseint,其他型別轉換為整數型別 console.log parseint 110 110 console.log parseint fg110 nan console.log parseint 1fg10 1 console.log parseint 1.10 1 console.log ...