沒搞清楚 convert.toint32 和 int.parse() 的細細微區別時千萬別亂用,否則可能會產生無法預料的結果,舉例來說:假如從 url 中取乙個引數 page 的值,我們知道這個值是乙個 int,所以即可以用 convert.toint32(request.querystring["page"]),也可以用 int.parse(request.querystring["page"]),但是如果 page 這個引數在 url 中不存在,那麼前者將返回 0,0 可能是乙個有效的值,所以你不知道 url 中原來根本就沒有這個引數而繼續進行下一下的處理,這就可能產生意想不到的效果,而用後一種辦法的話沒有 page 這個引數會丟擲異常,我們可以捕獲異常然後再做相應的處理,比如提示使用者缺少引數,而不是把引數值當做 0 來處理。
(1) 這兩個方法的最大不同是它們對 null 值的處理方法: convert.toint32(null) 會返回 0 而不會產生任何異常,但 int.parse(null) 則會產生異常。
(2) 對資料進行四捨五入時候的區別
(3) 對被轉換型別的區別 int.parse 是轉換 string 為 int, convert.toint32 是轉換繼承自 object 的物件為 int 的(可以有很多其它型別的資料)。你得到乙個 object 物件, 你想把它轉換為 int, 用 int.parse 就不可以, 要用 convert.toint32。
1、對於轉換物件,convert.toint32() 可以為多種型別(例出數字型別外 bool,datetime 等),int.tryparse() 和 int.parse() 只能是整型字串型別(即各種整型 tostring() 之後的形式,不能為浮點型,否則 int.parse() 就會出現輸入的字串格式不正確的錯誤,int.tryparse() 也會返回 false,輸出引數為 0 ,(int)只能是數字型別(例 float,int,uint等);
2、對於空值 null,從執行報錯的角度講,(int) 強制轉換和 int.parse() 都不能接受 null;convert.toint32() 其實是在轉換前先做了乙個判斷,引數如果為 null,則直接返回 0,否則就呼叫 int.parse() 進行轉換,int.tryparse() 其實是對 int.parse() 做了乙個異常處理,如果出現異常則返回 false,並且將輸出引數返回 0;
3、針對於浮點型的取捨問題,浮點型只有 convert.toint32() 和 (int) 能進行轉換,但是也是進行取捨了的,convert.toint32() 採取的取捨是進行四捨五入,而 (int) 則是擷取浮點型的整數部分,忽略小數部分,例如 convert.toint32(1.499d) 和 (int)1.499d 都返回 1,convert.toint32(1.5d) 返回 2,而 (int)1.5d 還是返回 1;
4、關於溢位,將大的資料型別轉換為小的資料型別時 convert.toint32() 和 int.parse() 都會報溢位錯誤,值對於 int32 太大或太小,而 (int) 不報錯,但是返回值為 -1。
如此可見,我們在進行資料轉換前選擇轉換方法要謹慎,如果是數字型別可以考慮直接用(int)強制轉換,如果是整型字串型別的,考慮用 int.parse() 進行轉換,如果不是這兩種型別,再考慮用 convert.toint32() 進行轉換。
C 學習筆記(1)
1.類和結構體的區別 區別在於訪問控制方面,對於結構體而言,所有成員預設都是public,即在外部可以訪問,對於類來說,預設條件下成員函式都是private,不能被外部訪問。2.c 中的建構函式 建構函式最重要的作用是建立物件本身。c 規定,每個類必須有乙個建構函式,沒有它,就不能建立任何物件。乙個...
C 學習筆記1
一,類的最基本的函式 乙個類至少有預設建構函式,拷貝建構函式,拷貝構造運算子,和析構函式四個最基本的函式,在下面的例子中將對這些函式進行講解。如下 includeusing namespace std class superone superone superone void superone se...
C 學習筆記1
c 中結構體 和 類可以通用,結構體中也可以定義函式.區別 在於訪問控制。結構體中 預設成員 都是public 類中 預設 私有的 建構函式 1。建構函式最重要的作用是建立物件本身 2.c 規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件 3.如果沒有提供建構函式,則c 提供乙個預設...