【问题标题】:How to check object is null or empty in C#.NET 3.5?如何在 C#.NET 3.5 中检查对象是否为空或为空?
【发布时间】:2012-03-08 13:51:06
【问题描述】:

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

如何布尔检查对象objnull还是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 ??

有没有办法检查?

【问题讨论】:

  • 您无法将空对象转换为字符串,因此会出现错误。只检查 if(obj != null) 有什么问题?
  • 你为什么要在你知道是null的对象上调用ToString(),从而生成NullReferenceException
  • 没有空对象这样的东西(虽然有空字符串这样的东西)。
  • 我认为这可能只是显示问题的示例代码......
  • 关于您的编辑,您认为空对象代表什么?

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


【解决方案1】:

您遇到的问题是您的对象是类型,嗯,对象。为了使用 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。

【讨论】:

  • 假设obj 是由一个比简单地将其设置为null 更复杂的过程生成的,如果该过程生成一个不是字符串的真实对象,则转换将失败。
  • 正确,这是假设在这种情况下的对象要么为空,要么可以转换为字符串。
  • 从技术上讲,这是假设对象可以转换为字符串,而不仅仅是转换。当 obj 实际上是一个 int,int.ToString() 工作,但 (string)int 失败时,这对我来说失败了。这太糟糕了;我试图避免额外的 ToString()。
【解决方案2】:

您正在获取空引用,因为您正在执行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);    

编辑

如果我从 cmets 中理解正确,您想知道对象是 null 还是空字符串。您可以先将其转换为字符串,而不是调用 ToString 方法,后者的作用完全不同:

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

【讨论】:

  • ok....如何验证该对象是null 还是empty 而不转换为.ToString() ??
  • 和你一样,只是你不调用 ToString 方法
  • @TBohnen.jnr 没有强制转换为字符串;调用 ToString 不是演员表。
  • 是的,太棒了,就像 c# 一样 :-)
  • 但是这种方法不能处理空字符串
【解决方案3】:
class Program
{
    static void Main(string[] args)
    {
        object obj = DBNull.Value;
        if(obj != DBNull.Value) {
            double d = Convert.ToDouble(obj);
            Console.WriteLine(d.ToString());
        }
    }
}

【讨论】:

    【解决方案4】:

    听起来你想做的是这样的:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我第一次听说null-coalescing 运营商,我很高兴了解更多关于这个运营商的新事物。您能否详细说明此运算符在 i 可以与简单而好的示例相同的情况下的重要性和好处。
      • 如果对象是empty那么如何验证?
      【解决方案6】:

      您不应该对使用此代码获得NullReferenceException 感到惊讶。违规的部分是

      obj.ToString()
      

      如果你写了

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

      你会期待一个NullReferenceException。由于对ToString 的调用发生在对string.IsNullOrEmpty 的调用之前,因此在检查空字符串或空字符串之前会引发异常。

      【讨论】:

        【解决方案7】:

        遵循代码可能是一种更安全的实现方式。

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

        这段代码将我们从非字符串类型的对象中解救出来。

        【讨论】:

        • .Value 属性从何而来?
        • 我的错..更新了..干杯伙伴!
        • 顺便说一句,OP 确实问过without converting into .ToString()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 2013-10-11
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        相关资源
        最近更新 更多