C# 判斷空字串
--------------------------------------------------------------------------------------------------------------------------
有時候會使用 != "" 來做為空字串的表示
logger.Debug("變數:"+text);
if(text != ""){
//do something
}
但往往從log會是其他地方看起來,該變數就沒有顯示任何東西
卻沒有進入判斷區塊裡面
因為對於C#來說 null 不等於 空字串
而某些顯示的時候自動把null 的例外處理掉了 以至於看起來像空
不等於空字串(或是String.Empty)的方式 跟 判斷字串長度是否等於0 還有null的情況一起考慮進去的話
可以直接使用現有的函式
String.IsNullOrEmpty
指示指定的字符串是否為 null 或者 空字符串;
返回值:如果參數為 null 或者 空字符串("" 、String.Empty),結果為true,否則為false。
等效於以下代碼:
result = s == null || s == String.Empty;
String.IsNullOrWhiteSpace
指示指定的字符串是否為 null、空字符串 或者 僅由空字符組成。
返回值:如果參數為 null 、 空字符串("" 、String.Empty) 或者 僅由空字符組成,結果為true,否則為false。
等效於以下代碼:
result = String.IsNullOrEmpty(s) || s.Trim().Length == 0;
-------------------------
有時候會用.Tostring()做字串轉換來輸出,但如果物件為null的時候又需要再例外判斷很麻煩
參考文章: https://tw.saowen.com/a/962bf234efb8313ba872e5702b19d6df3a961dd19b0f0335d744656214448675
object obj = ""; string str; str = obj.ToString(); str = Convert.ToString(obj); str = (string)obj; str = obj as string;
1. 前兩種方法用於得到一個物件的string表示,如DateTime型別轉string型別,一般自定義物件會重寫ToString()方法;
2. 區別在於若obj=null,obj.ToString()將導致System.NullReferenceException,而Convert.ToString(obj)返回null;
3. 後兩種方法要求obj的執行時型別必須是string;
4. 區別在於若obj不為string型別(如object obj = DateTime.Now),(string)obj將導致System.InvalidCastException異常,而obj as string返回null。
----------------------------
Null跟DBNull及String.Empty這三者不相等
string a=""
結果是
a != null; a != DBNull; a = string.Empty; string.IsNullOrEmpty(a) = true
string b=null
b = null; b != DBNull; b != string.Empty; string.IsNullOrEmpty(b) = true
Null是當物件未被初始化時的情況,例如 StreamReader reader;還沒有給new StreamReader();
""和String.Empty 這兩個都是表示空字符串。只不過""理論上重新開闢內存空間,而String.Empty指向一處。
string.Empty不分配存儲空間, ""分配一個長度為空的存儲空間,所以一般用string.Empty,為了以後跨平台,還是用string.empty。
在C# 中,大多數情況下 "" 和 string.Empty 可以互換使用。
DBNull:當至資料庫查詢,符合的資料回傳的資料欄位沒有值,為null時,此時此欄位的值就=DBNull.
當至資料庫查詢,沒有符合的資料回傳時,此時回傳的結果就=Null.
ex :
object o=cmd.ExecuteScalar();(回傳一個欄位的值)
狀況1:當DB回傳有符合的資料,但該欄位沒有值時.o = DBNull 可是 o != null
狀況2:當DB回傳沒有符合的資料時, o = null可是o != DBNull
狀況3:不論是狀況1或狀況2的結果,Convert.ToString(o)=string.Empty;
string str1="" 和 string str2=null 的區別。
str1是一個空字符串,空字符串是一個特殊的字符串,只不過這個字符串的值為空,在內存中是有準確的指向的,
string str2=null,這樣定義後,只是定義了一個string 類的引用,str2並沒有指向任何地方,在使用前如果不實例化的話,都將報錯。
-------------------------------------------------------------------------------------------------------
它:「我愛寫程式ㄟ!」
我:「你...愛寫程式?」
它:「是阿!」
我:「你...愛用程式解決問題?愛寫出被大家所使用的程式?愛能夠用程式改變世界的力量?」
它:「沒錯!你說得太...」
我:「你愛日以繼夜焚膏繼晷的寫程式?你愛無法離座坐到屁股長痔瘡的寫程式?你愛寫程式愛到奮不顧身?」
它:「你...」
我:「你愛想破頭想到拿頭去撞牆想到掉光頭髮的寫程式?你愛被時程、需求、主管、客戶追著跑的寫程式?你愛寫程式即使程式不愛妳?」
我:「你愛你明明知道這樣不是好的寫法卻仍然得這樣寫?你愛維護別人寫出來的爛程式?你愛聽不懂的主管胡說八道該怎麼寫?」
它:「你在說什麼東西啦!你也沒有這樣子阿!」
我:「是阿,所以我不愛寫程式。」
它:「你懂不懂寫程式阿?」
我:「:)」