2017-05-29 22 views
-1

我有一個字符串TempDayValues[j]持有空但下面兩個例子不承認null如何識別一個空刺

string Temp = TempDayValues[j].Trim(); 
if (string.IsNullOrEmpty(Temp)) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

If(Temp == null) 
{ 
    //code here 
} 

有沒有什麼更好的方法來識別null值?

+7

如果你設法在沒有'NullReference'的字符串上執行'.Trim()',那麼你的字符串不是null。也許你正在尋找'IsNullOrWhiteSpace' - 爲空的空白空白? –

+0

實際上,如果[j]後面的值爲空,第一行應該拋出一個NullReferenceException。因爲你正在調用'.Trim'的空值。如果它沒有拋出任何異常,那麼[j]後面的值顯然不爲空。 – ckruczek

+0

這不能既不是空字符串也不是空字符串。如果你在一個空字符串上調用Trim,你會得到一個異常。而string.IsNullOrEmpty是檢查這種情況的正確方法。所以在這裏工作有些不同。使用調試器檢查Temp的值是什麼 – Steve

回答

3

null相比是檢查的方式。但是,在您的代碼中,如果在撥打Trim時尚未獲得NullReferenceException,那麼您的字符串不爲空。

可能是你正在尋找IsNullOrWhiteSpace

if (string.IsNullOrWhiteSpace(TempDayValues[j])) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

如果你首先要檢查它是否爲空,並有一個行爲和不同的,如果它是空/空白:

if(TempDayValues[j] == null) 
{ 
    // code 
} 
else if(TempDayValues[j].Trim() == string.Empty) 
{ 
    // code 
} 
0

您的問題雖然有效,但缺少對您要完成的任務的解釋。既然你只問過空檢查,我的答案只關注在您的代碼片段中執行的空檢查。

有幾件事情需要此話你的代碼,我認爲這將有助於你瞭解情況更好。

String Temp = TempDayValues[j].Trim(); 

有趣的是,您已經對該字符串調用了.Trim()。如果TempDayValues[j]爲空,則會引發異常。您不能對空值調用方法(您也無法訪問空值上的屬性和字段)。

如果您的應用程序沒有拋出異常;我認爲這不是你沒有提到過的;那麼你已經隱含地已經「證明」你的字符串不爲空。因爲你會得到一個例外,否則。

另外請注意,.Trim()不會讓一些空。由於您只是在檢查TempDayValues[j]是否爲空(並可能覆蓋該值,但從未使用的值爲)感興趣;爲了空檢查的目的,使用.Trim()在功能上無關緊要。

假設爲解釋的其餘部分,它是可能的您的字符串爲空;即使.Trim()已經使你的例子不可能。

if (string.IsNullOrEmpty(Temp)) 
{ 
    Console.WriteLine("Found Null"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

你如果,如果你的字符串爲null,而且如果是空塊將被執行。畢竟,你是調用方法string.IsNull 或空()。一個空字符串是一個不爲空的字符串,但也不包含任何字符。

所以更正確的信息將是「發現空或空字符串」。

if(Temp == null) 
{ 
    //code here 
} 

雖然這是檢查空的有效方法;如果您的字符串爲空,則if塊不會執行。這可能是你正在尋找的。在大多數情況下,我希望String.IsNullOrEmpty()更適合;但我不知道你的代碼的具體目的。

在這裏,說「你找到空」而不是空字符串是正確的。


這就是說;這個問題的答案是什麼?

這不容易回答;因爲你沒有解釋代碼段的意圖。我將提供一個代碼改進,這是我可以給你最好的,沒有更多的信息。

string Temp = TempDayValues[j]; 
if (string.IsNullOrEmpty(Temp)) //use Temp == null here if you don't want it to trigger on empty strings. 
{ 
    Console.WriteLine("Found Null or empty string"); 
    TempDayValues[j] = TempDayValues[j - 1]; 
} 

編輯如果您還需要這個,如果因爲你的字符串不爲空,不爲空的情況下要執行塊,但它僅包含空格;那麼請致電.Trim()。在這種情況下,改變你如果塊:

if (string.IsNullOrEmpty(Temp) || string.IsNullOrEmpty(Temp.Trim())) 

如果溫度爲空,只有左操作將被執行(因爲它使評價結果true無論右操作數)。
僅當您的字符串不爲空或爲空時,纔會執行右操作數。在這種情況下,它允許您檢查僅包含空白字符的字符串。

+0

謝謝大家。你的評論幫助我意識到,那裏必須有一個字符串。你能相信數據中的字段是否包含字符串「null」!!困惑了我好幾天。我會一直在學習 – Tim