C# ToString()和Convert.ToString()的區別
一、一般用法說明
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()
。
ToString()
這個方法太方便了,以致於以為就它這一種方法, 一般都是轉之前先判斷是否為null
.
相關文章
- [C#]C#中ToString()和Convert.ToString()的區別C#
- Java String.valueOf 和 toString的區別Java
- c#中值型別和引用型別的區別C#型別
- C#中Hashtable和HashMap的區別C#HashMap
- C#中ref和out的區別C#
- 【轉】C#中virtual和abstract的區別C#
- C#中堆和堆疊的區別C#
- C# 中 Struct 和 Class 的區別總結C#Struct
- C# 中的 == 和 equals()有什麼區別?C#
- C#中ToString()格式大全C#
- Python和C#有哪些區別?PythonC#
- C#中的屬性和欄位的區別C#
- C#中常用的ToString()方法總結C#
- 棧(Stack) --- C# 自定義和微軟官方的區別C#微軟
- C#中類和結構的一個區別...C#
- c#中Debug和Release的區別實驗C#
- .net與C#的區別C#
- c#與java的區別C#Java
- C#中ToString()格式詳解C#
- C#中String和string區別C#
- 淺談C#中重寫和隱藏的區別C#
- c# as_is的使用及區別C#
- ../和./和/的區別
- C#基礎加強三:Dispose() 和 Close() 和 Finalize() 的區別C#
- C# 中List中的Count和Count(),有什麼區別C#
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- ToString()格式和用法大全,C#實現保留兩位小數的方法C#
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- C#陣列與集合的區別C#陣列
- C#中List與IList的區別C#
- C# suspend sleep join 區別C#
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery