簡體   English   中英

C#-轉換-澄清

[英]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關鍵字不能與值類型(例如Int32PointDateTime )一起使用。

在我自己的代碼中,我通常將它們混合使用,但是通常我遵循以下方案:

  • 如果要將字符串轉換為數字類型,通常會使用該數字類型提供的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM