如何在C#.NET 3.5中检查对象是否为null或空?
如果对象包含null或empty,那么如何验证或检查相同的条件 如何布尔检查对象obj是否为如何在C#.NET 3.5中检查对象是否为null或空?,c#,asp.net,.net-3.5,C#,Asp.net,.net 3.5,如果对象包含null或empty,那么如何验证或检查相同的条件 如何布尔检查对象obj是否为null或Empty 我的代码如下: class Program { static void Main(string[] args) { object obj = null; double d = Convert.ToDouble(string.IsNullOrEmpty(obj.ToString()) ? 0.0 : obj); Cons
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异常
,因为对象引用未设置为对象的实例。
请帮忙
在这里我没有得到
如何在不转换为.ToString()的情况下验证该对象是null
还是Empty
是否有一种方法来检查相同的情况???您得到的是空引用,因为您正在执行将返回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
无空合并:(??)
编辑
如果我从注释中正确理解,您希望知道对象是null还是空字符串。您可以首先将其强制转换为字符串,而不是调用执行完全不同操作的方法:
string objString = (obj as string);
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);
如果使用此代码得到
NullReferenceException
,您不应该感到惊讶。令人不快的是
obj.ToString()
如果你写
object obj = null;
string s = obj.ToString();
您可能会遇到
NullReferenceException
。由于对ToString
的调用发生在调用string.IsNullOrEmpty
之前,因此在检查null或空字符串之前会引发异常。您可以使用操作符。它被称为操作员。听起来您要做的是:
object obj = null;
double d;
if (!double.TryParse(Convert.ToString(obj), out d))
{
d = 0.0;
}
但是这个问题没有多大意义。您遇到的问题是,您的对象属于object类型。为了使用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。下面的代码可能是实现它的更安全的方法
if(obj != null && !string.IsNullOrEmpty(obj.ToString()))
{
}
这段代码将我们从非字符串类型的对象中解救出来。您无法将空对象转换为字符串,因此会出现错误。只检查(obj!=null)有什么错?为什么要对一个已知为null
的对象调用ToString()
,从而生成NullReferenceException
?没有空对象(尽管有空字符串)。我想这可能只是一个示例代码来说明问题……关于您的编辑,您认为空对象代表什么?好的……如何验证该对象是null
还是empty
,而不转换为。ToString()
?与您所做的相同,只是您不调用ToStringmethod@TBohnen.jnr没有对弦的投射;调用ToString不是强制转换。是的,这很了不起,就像c:-)但是这种方法不能处理空字符串。如果obj
是由一个比简单地将其设置为null
更复杂的进程生成的,那么如果该进程生成的是一个不是字符串的真实对象,强制转换就会失败。正确,这是假设本例中的对象要么为null,要么可以转换为字符串。从技术上讲,这是假设对象可以转换为字符串,而不仅仅是转换。当obj实际上是一个int时,我失败了,int.ToString()可以工作,但(string)int失败了。太糟糕了;我试图避免使用额外的ToString()。这是我第一次听说null coaliescing
操作符,了解更多关于该操作符的新事物让我感到兴奋。你能详细说明一下这个操作符的重要性和优点吗?我的错..更新了..干杯,伙计!顺便说一句,OP没有转换成.ToString()
就询问了。
class Program
{
static void Main(string[] args)
{
object obj = DBNull.Value;
if(obj != DBNull.Value) {
double d = Convert.ToDouble(obj);
Console.WriteLine(d.ToString());
}
}
}
if(obj != null && !string.IsNullOrEmpty(obj.ToString()))
{
}