[英]C# - Conversion -Clarification
對於神童來說,這可能是一個非常基本的問題,但我對此有疑問。
在轉換期間,我們使用:
每種使用有哪些限制?
int.Parse假定字符串為參數,因此僅適用於將原始字符串表示形式轉換為整數
Convert.ToInt32()將嘗試將幾乎所有對象轉換為整數表示形式。 如果表示形式不是有效的int(即使用值為55.3的浮點數或包含單詞的字符串),則將引發FormatException。 如果整數太大而不能容納在int中,則將發生OverflowException。
(int)是直接轉換。 基本上是說“我知道這個對象實際上是一個整數,將其視為此類”。 如果對象實際上不是整數,則將獲得無效的強制轉換異常。
最后,as的行為與直接轉換相同,不同之處在於對象的類型不正確時,它將分配null。 不知道int是不可為空的類型,但肯定可以將其用於int
int? myInt = someVar as int?;
Convert.ToNnnn
具有其重載所規定的限制; 例如,您不能調用Convert.ToMyCustomType
(因為該方法不存在)。 您可以將幾乎所有內容傳遞給Convert.ToString
(或Convert.ToInt32
或任何其他Convert.ToNnnn
方法),但結果可能並不總是有意義。 另外,如果方法無法執行轉換,則可能拋出InvalidCastException
。
常規類型的大小寫( (int)someValue
)可以在所有有顯式轉換可用的情況下使用。 如果您嘗試執行非法投射,則會拋出異常。
as
關鍵字可用於將類型轉換為其他(引用)類型(如果不可能,它將返回null)。 as
關鍵字不能與值類型(例如Int32
, Point
或DateTime
)一起使用。
在我自己的代碼中,我通常將它們混合使用,但是通常我遵循以下方案:
TryParse
。 as
關鍵字。 try/catch
塊中使用常規類型轉換。 Convert.ToInt32
可以從各種類型(DateTime,Decimal等)轉換回整數,而int.Parse()
僅從字符串轉換。
如果僅將字符串解析為整數,那么Convert.ToInt32
只是int.Parse
的別名,因此您最好使用int.Parse
。
關於強制轉換,您不能將字符串強制轉換為整數,必須像上面提到的那樣將其轉換 。
考慮到您正在使用數據庫,並且有一列在存儲整數數據時被低效率地聲明為varchar
。 例如,在使用SqlDataReader時,不能執行(int)dr["column"]
,而必須使用int.Parse(dr["column"].ToString())
。 如果該列是數據庫中的int
列類型,則可以使用強制轉換: (int)dr["column"]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.