如何在C#.NET 3.5中检查对象是空还是空?

时间:2012-02-17 05:50:50

标签: c# asp.net .net-3.5

如果对象包含null或为空,那么如何验证或检查相同的条件?

如何bool检查对象 obj null还是Empty

我的代码如下:

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 Exception作为Object reference not set to an instance of an object.

请帮助。

在这里,我没有得到......

如何在不转换为.ToString()的情况下验证该对象是null还是Empty

有没有办法检查相同的?

7 个答案:

答案 0 :(得分:13)

您遇到的问题是您的对象是类型,对象。为了使用string.IsNullOrEmpty来评估它,你应该将你的对象传递给(string)

像这样:

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

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

这样可以正常工作,因为您没有在(不存在的)对象上显式调用.ToString。

答案 1 :(得分: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);    

修改

如果我从评论中正确理解,您想知道对象是否为空或字符串为空。您可以通过首先将其强制转换为字符串而不是调用完全不同的ToString方法来完成此操作:

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

答案 2 :(得分: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());
        }
    }
}

答案 3 :(得分:1)

您可以使用??运算符。它被称为null-coalescing运算符。

答案 4 :(得分:1)

听起来你想做的就是:

object obj = null;
double d;

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

但这个问题没有多大意义。

答案 5 :(得分:0)

使用此代码获得NullReferenceException时,您不应该感到有点惊讶。违规部分是

obj.ToString()

如果你写了

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

你会期望NullReferenceException。由于在调用ToString之前调用了string.IsNullOrEmpty,因此在检查空字符串或空字符串之前会抛出异常。

答案 6 :(得分:0)

以下代码可能是实现它的更安全的方式。

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

}

此代码将我们从对象中保存为非字符串类型。