[C#]C#中ToString()和Convert.ToString()的區別

阿婆說發表於2018-07-03

一、一般用法說明

  ToString()是Object的擴充套件方法,所以都有ToString()方法;而Convert.ToString(param)(其中param引數的資料型別可以是各種基本資料型別,也可以是bool或object類物件。

二、ToString()和Convert.ToString()的區別

  一般情況下,這兩種方法都可以通用,但是當返回的資料型別中有可能出現null值時如果呼叫ToString方法了,就會返回NullReferenceException,除非你要捕捉此異常再做處理,否則在這種情況下就應考慮使用Convert.ToString()方法了,因為Convert.ToString(null)不會丟擲異常而是返回空字串。
主要的區別就如上所示,由於ToString()是擴充套件方法,擴充套件自Object,所以轉null報異常。而Convert.ToString()返回空字串。

  不過Convert.ToString(),作用不算太大,因為:

static void Main(string[] args)
    {
      string str1 = "";
      Console.WriteLine(Convert.ToString(str1) == null); //false
      Console.WriteLine(Convert.ToString(str1) == "");  //true

      string str2 = null;
      Console.WriteLine(Convert.ToString(str2) == null); //true
      Console.WriteLine(Convert.ToString(str2) == "");  //false

      Console.ReadKey();
    }

null轉了之後還是null,””轉了之後還是””。

  所以,配合上string.IsNullOrEmpty(Convert.ToString())還是比較方便的。

    Console.WriteLine(string.IsNullOrEmpty(Convert.ToString(str1)));  //true
    Console.WriteLine(string.IsNullOrEmpty(Convert.ToString(str1)));  //true

   另外,如果是跟某字串對比,那麼使用Convert.ToString()還是很方便的,例如

    if(Convert.ToString(str) == "123")
    {

    }

三、object到string的轉換

  從 object 到 string 大致有四種方式,包括顯式轉換和as關鍵詞的使用:obj.ToString()、Convert.ToString()、(string)obj、obj as string。他們都能將 object 物件轉換成 string 物件。

  前兩個方法通常是由別的物件得到 string 物件,它們間的區別如前文所述主要表現在:

ToString() :如果 obj 為 null,呼叫 obj.ToString() 方法會導致 NullReferenceException 異常。

Convert.ToString():如果 obj 為 null,呼叫 Convert.ToString()會返回null

(string):用強制轉換 (string)obj 要求 obj 的執行時型別必須是 string。如果不是,就會丟擲異常。

as :用 as 方法則會相對平穩,當 obj 的執行時型別不是 string 時會返回 null 而不丟擲異常。

  所以在通常在我們需要得到某個物件的 string 表達形式時,我們應該使用 ToString() 和 Convert.ToString(),這時候你就得根據情形選一個,假如你能保證你的物件不為 null,則兩個差不多。如果有可能為 null,你就應該用 Convert.ToString(),如果你希望它為 null 的時候丟擲異常,那麼當然可以選擇 ToString()。

相關文章