如果对象包含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
有没有办法检查相同的?
答案 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()))
{
}
此代码将我们从对象中保存为非字符串类型。