九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的區(qū)別

https://www.cnblogs.com/leolis/p/3968943.html

在編程過程中,數(shù)據(jù)轉(zhuǎn)換是經(jīng)常要用到的,C#中數(shù)據(jù)轉(zhuǎn)換的方法很多,拿將目標(biāo)對(duì)象轉(zhuǎn)換為整型(int)來講,有四種方法:分別為(int)、int.Parse()、int.TryParse()和Convert.ToInt32(),那么這四種方法對(duì)被轉(zhuǎn)換對(duì)象有什么限制,以及各自之間有什么區(qū)別呢?相信很多童鞋也不能完全說清楚。

下面從被轉(zhuǎn)換對(duì)象說起,在我們實(shí)際開發(fā)項(xiàng)目的過程中,我們碰到需要被轉(zhuǎn)換的類型大概有3大類,分別是空值(NULL)、數(shù)字類型(包含float,double,int,long等)和字符串(string)這3類。

先看第一種情況:NULL,采用如下代碼進(jìn)行測(cè)試:

int a = Convert.ToInt32(null);
int b;
bool rlt = int.TryParse(null, out b);
int c = int.Parse(null);
int d = (int)null;

很明顯,在運(yùn)行之前VS就會(huì)在最后一句報(bào)錯(cuò):“Cannot convert null to 'int' because it is a non-nullable value type”,這是說不能將NULL轉(zhuǎn)換為INT因?yàn)镮NT是一個(gè)非空值類型,然后注釋掉最后一句,再運(yùn)行一下,發(fā)現(xiàn)這一句(int c = int.Parse(null);)會(huì)報(bào)如下錯(cuò)誤:“Value cannot be null.”,值不能為空,a和b分別返回0,rlt為false;

然后繼續(xù)看第二種情況:數(shù)字類型(主要測(cè)試double和long類型),先將代碼修改如下:

double m = 1.232d;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;

然后運(yùn)行一下,發(fā)現(xiàn)這一句(int c = int.Parse(m.ToString());)會(huì)報(bào)錯(cuò):“Input string was not in a correct format.”,輸入的字符串格式不正確,注釋掉這一句然后運(yùn)行,然后查看返回值,a=1,b=0,rlt=false,d=1,將m的值修改為1.532d后再運(yùn)行一次,查看結(jié)果為a=2,b=0,rlt=false,d=1;下面測(cè)試long類型,將代碼修改為:

long m = 9223372036854775807;
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m.ToString(), out b);
int c = int.Parse(m.ToString());
int d = (int)m;

運(yùn)行后發(fā)現(xiàn)(int a = Convert.ToInt32(m);)和(int c = int.Parse(m.ToString());)報(bào)錯(cuò):“Value was either too large or too small for an Int32.”,值對(duì)于Int32太大或太小,其他返回結(jié)果b=0,rlt=false,d=-1;

下面繼續(xù)看第三種情況:字符串,同樣修改代碼如下:

string m = "1.32";
int a = Convert.ToInt32(m);
int b;
bool rlt = int.TryParse(m, out b);
int c = int.Parse(m);
int d = (int)m;

發(fā)現(xiàn)最后一句(int d = (int)m;)報(bào)錯(cuò):“Cannot convert type 'string' to 'int'”,不能轉(zhuǎn)換string到int類型,同樣注釋掉這句再運(yùn)行,發(fā)現(xiàn)(int a = Convert.ToInt32(m);)和(int c = int.Parse(m);)均報(bào)如下的錯(cuò)誤:“Input string was not in a correct format.”,輸入的字符串格式不正確,只有將m的值修改為整型的字符串(如:”12”)才不會(huì)報(bào)如此錯(cuò)誤。

好了,測(cè)試做完了,下面進(jìn)行總結(jié):

1)對(duì)于轉(zhuǎn)換對(duì)象,Convert.ToInt32()可以為多種類型(例出數(shù)字類型外bool,DateTime等),int.TryParse()和int.Parse()只能是整型字符串類型(即各種整型ToString()之后的形式,不能為浮點(diǎn)型,否則int.Parse()就會(huì)出現(xiàn)輸入的字符串格式不正確的錯(cuò)誤,int.TryParse()也會(huì)返回false,輸出參數(shù)為0),(int)只能是數(shù)字類型(例float,int,uint等);

2)對(duì)于空值NULL,從運(yùn)行報(bào)錯(cuò)的角度講,(int)強(qiáng)制轉(zhuǎn)換和int.Parse()都不能接受NULL;Convert.ToInt32()其實(shí)是在轉(zhuǎn)換前先做了一個(gè)判斷,參數(shù)如果為NULL,則直接返回0,否則就調(diào)用int.Parse()進(jìn)行轉(zhuǎn)換,int.TryParse()其實(shí)是對(duì)int.Parse()做了一個(gè)異常處理,如果出現(xiàn)異常則返回false,并且將輸出參數(shù)返回0;

3)針對(duì)于浮點(diǎn)型的取舍問題,浮點(diǎn)型只有Convert.ToInt32()和(int)能進(jìn)行轉(zhuǎn)換,但是也是進(jìn)行取舍了的,Convert.ToInt32()采取的取舍是進(jìn)行四舍五入,而(int)則是截取浮點(diǎn)型的整數(shù)部分,忽略小數(shù)部分,例如Convert.ToInt32(1.499d)和(int)1.499d都返回1,Convert.ToInt32(1.5d)返回2,而(int)1.5d還是返回1;

4)關(guān)于溢出,將大的數(shù)據(jù)類型轉(zhuǎn)換為小的數(shù)據(jù)類型時(shí)Convert.ToInt32()和int.Parse()都會(huì)報(bào)溢出錯(cuò)誤,值對(duì)于Int32太大或太小,而(int)不報(bào)錯(cuò),但是返回值為-1。

如此可見,我們?cè)谶M(jìn)行數(shù)據(jù)轉(zhuǎn)換前選擇轉(zhuǎn)換方法要謹(jǐn)慎,如果是數(shù)字類型可以考慮直接用(int)強(qiáng)制轉(zhuǎn)換,如果是整型字符串類型的,考慮用int.Parse()進(jìn)行轉(zhuǎn)換,如果不是這兩種類型,再考慮用Convert.ToInt32()進(jìn)行轉(zhuǎn)換。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
(int)、int.Parse()、int.TryParse()、Convert.ToInt32()區(qū)別
Convert.ToInt32(),Int.Parse(),Int.TryParse()的區(qū)別
字符串常見操作
C#優(yōu)化字符串操作
淺析四種C#轉(zhuǎn)換的區(qū)別 - 51CTO.COM
C#,int轉(zhuǎn)成string,string轉(zhuǎn)成int
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服