1:資料型別的隱式轉換,相對安全,不會導致資料丟失
無關鍵字與變數型別修飾的轉換稱作隱式轉換。(不是所有的隱式轉換都是可以的)
例項:
short a = 1212;
int b;
b = a; // 隱式轉換
int aa = 12;
short bb;
bb = aa; // 這樣的隱式轉換會報錯,因為int包含short。
console.writeline(bb);
任何整數型別,都可以隱式的轉化為任何浮點數型別。
int aaa = 12;
double bbb = 10.02;
bbb = aaa; // 整形隱式轉換成浮點型
console.writeline(aaa);
2:資料型別的顯式轉換強制型別轉換,而且強制轉換會造成資料丟失。int型別是可以轉換為short型別的,只要其值在short取值範圍內。一定要估計好資料型別的取值範圍。
// int az = 12345; //輸出值為123456
int az = 123456; //輸出值為-7616
short h;
h = (short)az;
console.writeline(h);
顯示轉換需要注意精度問題(不是很安全)
double pai = 3.14;
int asd;
asd = (int)pai; // 3,不是四捨五入,是直接擷取
console.writeline(asd);
使用check關鍵字:提示執行錯誤
int az = 123456;
short h;
h = checked((short)az);
console.writeline(h);
輸出結果:
未經處理的異常: system.overflowexception: 算術運算導致溢位。
3:使用convert類進行型別轉換。
長型別(int、long)轉換成短型別(byte、short)需要考慮容量的問題
轉換為int型資料後進行了四捨五入的計算。
用convert類轉換時注意資料表達方式的有效性,並不是任意型別之間都可以轉換。比如string型別轉int型別,string只能是數字。
// 字串轉換雙精度浮點
string p = "3.14";
double pp = convert.todouble(p);
int d = 10;
double f = convert.todouble(d);
console.writeline(f); //10
int a = 1234;
string asd = convert.tostring(a);
console.writeline(asd); // 1234
console.writeline(asd.gettype()); // system.string
char qwe = convert.tochar(a);
console.writeline(qwe); // ? 字元只能是一位
console.writeline(qwe.gettype()); // system.char
string dc = "4125";
int ws = convert.toint32(dc);
console.writeline(ws); // 4125
console.writeline(ws.gettype()); // system.int32
string dates = "2019-05-31"; // 必須是字串才能轉換成datetime
datetime qa = convert.todatetime(dates);
console.writeline(qa); // 2019/5/31 0:00:00
console.writeline(qa.gettype()); // system.datetime
string zxc = "5.32";
double po = convert.todouble(zxc);
console.writeline(po); // 5.32
console.writeline(po.gettype());// system.double
float rf = convert.tosingle(zxc);
console.writeline(rf); // 5.32
console.writeline(rf.gettype());// system.single
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-qc23ykhk-1617329685025)(
4:as運算子
as 運算子必須與引用型別或者可以為null型別的變數一起使用,否則會報編譯錯誤
使用as運算子進行型別轉換效率相對高一些。
示例:
int aaaa = 10;
object strs = aaaa as object;
下面兩種情況不能使用as運算子進行型別轉換。
1、不用在型別之間進行型別轉化,即如下編寫就會出現編譯錯誤。
newtype newvalue = new newtype();
newtype1 newvalue = newvalue as newtype1;
這個可以直接進行顯示轉換
newtype newvalue = new newtype();
newtype1 newvalue = (newvalue)newtype1;
2、不能應用在值型別資料,即不能如下寫(也會出現編譯錯誤)
object obj1 = 11;
int nvalue = obj1 as int;
這個首先需要使用 is 運算子進行判斷 再進行顯示轉換
object obj1 = 11;
if(objtest is int )
5:裝箱和拆箱(比較慢)裝箱是值型別到 object 型別或到此值型別所實現的任何介面型別的隱式轉換。對值型別裝箱會在堆中分配乙個物件例項,並將該值複製到新的物件中。(隱式轉換)拆箱是從 object 型別到值型別或從介面型別到實現該介面的值型別的顯式轉換。(顯示轉換)
int i = 13;
object ob = i; // 這是裝箱
int i = 13;
object ob = i;
int j = (int)ob; // 這是拆箱
在c#中提供的很好的型別轉換方式總結為:
object => 已知引用型別——使用as操作符完成;
object => 已知值型別——先使用is操作符來進行判斷,再用型別強轉換方式進行轉換;
已知引用型別之間轉換——首先需要相應型別提供轉換函式,再用型別強轉換方式進行轉換;
已知值型別之間轉換——最好使用系統提供的conver類所涉及的靜態方法。
測試完整**:我這裡使用的是控制台應用判斷資料型別的四種方法
typeof typeof 一般用於判斷基本型別null除外,typeof也可以判斷function 但判斷array,error,null 這幾個引用型別時對會被typeof判斷為object,所以如果想判斷這幾種資料型別,就不能使用 typeof 了,比較有侷限性 instanceof inst...
判斷資料型別的四種方法(Marksheng)
typeof typeof 一般用於判斷基本型別null除外,typeof也可以判斷function 但判斷array,error,null 這幾個引用型別時對會被typeof判斷為object,所以如果想判斷這幾種資料型別,就不能使用 typeof 了,比較有侷限性 instanceof inst...
js的資料型別以及判斷型別的四種方法
四種判斷型別的方法 null 表示定義為空 undefined 表示未定義 string 字串 number 特殊的兩個符號 nan和infinity isnan 判斷乙個數是否為無窮大,nan和任何數都不相等,包括它本身。parseint p1,p2 p1為字串,如果不是則轉換為字串後再進行處理。...