本篇文章给大家谈谈为什么null不等于nullfalse,以及null为什么是0的知识点,同时本文还将给你拓展c–非指针等于NULL的是什么?、c#–DBNull如何不等于DBNull、c#–为什么n
本篇文章给大家谈谈为什么null不等于null false,以及null为什么是0的知识点,同时本文还将给你拓展c – 非指针等于NULL的是什么?、c# – DBNull如何不等于DBNull、c# – 为什么null条件运算符对==和.Equals()的行为不同?、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 为什么null不等于null false(null为什么是0)
- c – 非指针等于NULL的是什么?
- c# – DBNull如何不等于DBNull
- c# – 为什么null条件运算符对==和.Equals()的行为不同?
- failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8
为什么null不等于null false(null为什么是0)
我正在阅读本文: 在SQL中获取null == null
共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是:
where ((A=B) OR (A IS NULL AND B IS NULL))
当A和B为NULL
时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。
检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
但是,我注意到这不是必需的(至少在informix 11.5上没有),我可以这样做:
where (A<>B)
如果A和B为NULL,则返回FALSE。如果NULL不等于NULL,那么这不应该返回TRUE吗?
编辑
这些都是很好的答案,但我认为我的问题有点含糊。请允许我改写:
假设A或B可以为NULL,是否足以用来检查它们的不等式
where (A<>B)
还是我需要像这样显式检查它:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
答案1
小编典典涉及NULL的关系表达式实际上再次产生NULL
编辑
在这里,<>代表任意的二进制运算符,NULL是SQL占位符,value是任何值(NULL是不是一个值):
NULL <> value -> NULL
NULL <> NULL -> NULL
逻辑是:NULL表示“无值”或“未知值”,因此与任何实际值的任何比较都是没有意义的。
X = 42
假设您不知道拥有什么值(如果有),它是true,false还是未知X?SQL表示未知。X = Y
假设两者都是未知的,则为真,假或未知?SQL说结果未知。它对任何二元关系操作都是如此,这只是逻辑上的(即使模型中的NULL不在首位)。
SQL还提供了两个一元后缀运算符IS NULL和IS NOT NULL,它们根据其操作数返回TRUE或FALSE。
NULL IS NULL -> TRUE
NULL IS NOT NULL -> FALSE
c – 非指针等于NULL的是什么?
如果条目不存在,我有一段代码返回NULL指针:
ObjectType * MyClass::FindobjectType( const char * objectTypeName ) { if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() ) { Msg( "\n[C++ ERROR] No object type: %s",objectTypeName ); return NULL; } else return &objectTypeMap[ objectTypeName ]; }
我想做同样的事情,但这次返回一个对象,而不只是一个指针.以下代码不会给我任何编译器错误(这让我感到惊讶):
ObjectType MyClass::FindobjectType( const char * objectTypeName ) { if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() ) { Msg( "\n[C++ ERROR] No object type: %s",objectTypeName ); } else return objectTypeMap[ objectTypeName ]; }
用指针我可以检查是否没有找到这样的条目:
if ( FindobjectType( objectType ) == NULL ) //Do something
如何对待返回的对象执行等效检查?
解决方法
一个选项是创建一个“哨兵”对象,保证与任何“真实”对象的不平等进行比较,并返回:
class ObjectType { public: static const ObjectType null; bool operator==(const ObjectType &rhs) const { /* need an appropriate comparison test */ } ... }; ObjectType ObjectType::null(/* something unique */); ... ObjectType foo(const char *objectTypeName) { if (cond) { return objectTypeMap[objectTypeName]; } else { return ObjectType::null; } } ... if (foo(objectType) == ObjectType::null) { std::cout << "Returned the null object\n"; }
c# – DBNull如何不等于DBNull
if (dbnull.Value.Equals(o) || o != null)
其中o是row中的对象o.ItemArray我一直收到错误 – >
Xml类型“xdt:untypedAtomic列表”不支持从Clr类型“dbnull”到Clr类型“String”的转换.
我不明白的是,当我单步执行我的代码时,如果应该抓住这个并执行我的替代操作,但它不是?
有人可以为我解释一下.
谢谢!
解决方法
Convert.IsDBNull方法.
c# – 为什么null条件运算符对==和.Equals()的行为不同?
var firstChild = token.First as JProperty; bool isHref = token.Children().Count() == 1 && firstChild?.Name == "href";
我想使字符串比较不区分大小写,所以我将其更改为:
var firstChild = token.First as JProperty; bool isHref = token.Children().Count() == 1 && firstChild?.Name.Equals("href",StringComparison.OrdinalIgnoreCase);
现在编译器给了我一个错误:
Operator && cannot be applied to operands of type ‘bool’ and ‘bool?’
我可以通过合并到false来修复错误
bool isHref = token.Children().Count() == 1 && (firstChild?.Name.Equals("href",StringComparison.OrdinalIgnoreCase) ?? false);
但我很好奇为什么编译器不喜欢第一个空条件语法.
解决方法
string x = null,y = null; // this is null. b1 is bool? var b1 = x?.Equals(y); // b2 is bool // this is true,since the operator doesn't require non-null operands var b2 = x == y;
基本上.Equals()需要一个非null对象来操作.这与==不同,后者是静态绑定的,不是动态调度的.
failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8
IDEA整合springboot与neo4j时出现这个问题
关于为什么null不等于null false和null为什么是0的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c – 非指针等于NULL的是什么?、c# – DBNull如何不等于DBNull、c# – 为什么null条件运算符对==和.Equals()的行为不同?、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8的相关信息,请在本站寻找。
本文标签: