2012-02-17 63 views
7

如果對象包含null或空,那麼如何驗證或檢查相同的條件?如何在C#.NET 3.5中檢查對象爲空或空?

如何爲bool檢查OBJ對象是否是nullEmpty

我有代碼如下:

class Program 
{ 
    static void Main(string[] args) 
    { 
     object obj = null; 

     double d = Convert.ToDouble(string.IsNullOrEmpty(obj.ToString()) ? 0.0 : obj); 
     Console.WriteLine(d.ToString()); 
    } 
} 

有了這個代碼我得到NullReference ExceptionObject reference not set to an instance of an object.

PLS幫幫我。

在這裏,我沒有得到....

如何驗證對象是nullEmpty沒有轉換成的ToString()?

是否有一種方法檢查相同?

+1

您無法將空對象轉換爲字符串,從而導致錯誤。剛剛檢查if(obj!= null)有什麼問題? – rikitikitik 2012-02-17 05:53:17

+1

爲什麼要在一個你知道是'null'的對象上調用'ToString()',並因此產生'NullReferenceException'? – 2012-02-17 05:53:23

+1

沒有這樣的東西作爲一個空對象(雖然有這樣的東西,如空字符串)。 – phoog 2012-02-17 05:58:21

回答

12

您遇到的問題是您的對象是類型,以及對象。爲了與string.IsNullOrEmpty來評價它,你應該與鑄造通過你的對象(字符串)

像這樣:

static void Main(string[] args) 
{ 
    object obj = null; 

    double d = Convert.ToDouble(string.IsNullOrEmpty((string)obj) ? 0.0 : obj); 
    Console.WriteLine(d.ToString()); 
} 

這將很好地工作,因爲你沒有顯式調用的ToString上你的(不存在的)對象。

+0

假設'obj'是由一個更復雜的過程生成的,而不是簡單地將其設置爲'null',那麼在該過程生成一個不是字符串的真實對象的情況下,該強制轉換將失敗。 – 2012-02-17 06:01:32

+1

正確,這是假設在這種情況下的對象將是null或可以轉換爲字符串的東西。 – 2012-02-17 06:03:07

+0

從技術上講,這是假定該對象可以轉換爲字符串,而不僅僅是轉換。這對我來說當obj實際上是一個int,int.ToString()工作,但(字符串)int失敗。這太糟糕了;我試圖避免額外的ToString()。 – goodeye 2015-03-29 01:22:11

3

由於您正在執行obj.ToString(),您將獲得空引用,它將返回obj的ToString()方法返回值。問題是,在之前的行,你設置的obj爲null,所以你會得到一個對象的引用不...錯誤

爲了讓你的代碼工作,你需要做的:

//This will check if it's a null and then it will return 0.0 otherwise it will return your obj. 
double d = Convert.ToDouble(obj ?? 0.0); 

您的代碼,因爲它是然而現在永遠是0.0

沒有空合併:(??)

double d = Convert.ToDouble(obj ? 0.0 : obj);  

編輯

如果我理解你想知道的對象是空還是空字符串。

string objString = (obj as string); 
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);  
+0

ok ....如何在不轉換爲'.ToString()'?的情況下驗證該對象是否爲空或空。 – venkat 2012-02-17 05:56:09

+0

像你這樣做,只是你不要調用ToString方法 – 2012-02-17 05:57:21

+0

@ TBohnen.jnr沒有強制轉換爲字符串;調用ToString不是一個強制轉換。 – phoog 2012-02-17 06:00:59

0

你不應該是一個有點驚訝的是,你得到這個代碼NullReferenceException:您可以通過它轉換爲String第一,而不是調用ToString方法,做完全不同的事情做到這一點。有問題的部分是

obj.ToString() 

如果你寫

object obj = null; 
string s = obj.ToString(); 

,你會期望一個NullReferenceException。由於ToString的調用在調用string.IsNullOrEmpty之前發生,因此在檢查空字符串或空字符串之前拋出異常。

1

您可以使用??運算符。它被稱爲null-coalescing運營商。

+0

我第一次聽說'null-coalescing'操作符,並且對於更多地瞭解這個操作符的新東西感到興奮。你能否給我一些關於這個操作符的重要性和好處的細節,我可以用簡單而好的例子來說明。 – venkat 2012-02-17 06:15:43

+0

如果對象是「空」,那麼如何驗證? – venkat 2012-02-17 06:19:16

1

這聽起來像你想做的事是這樣的:

object obj = null; 
double d; 

if (!double.TryParse(Convert.ToString(obj), out d)) 
{ 
    d = 0.0; 
} 

但問題並沒有做出很大的意義。

2
class Program 
{ 
    static void Main(string[] args) 
    { 
     object obj = DBNull.Value; 
     if(obj != DBNull.Value) { 
      double d = Convert.ToDouble(obj); 
      Console.WriteLine(d.ToString()); 
     } 
    } 
} 
-1

以下代碼可能是實現它的一種更安全的方式。

if(obj != null && !string.IsNullOrEmpty(obj.ToString())) 
{ 

} 

這段代碼將我們從對象中保存爲非字符串類型。

+0

'.Value'屬性來自哪裏? – Enigmativity 2016-10-09 23:49:15

+0

我的壞..更新了它..乾杯! – 2016-10-10 02:02:48

+0

順便說一句,OP沒有轉換成.ToString()'而詢問''。 – Enigmativity 2016-10-10 03:34:40