2012-02-17 53 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