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 )
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
c 過載operator的示例 非原創
include includeusing namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件和...
C 型別轉換
在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...