Tag: null conditional operator

使用Null条件运算符检查可能为null的对象的值

我一直在玩C#6的Null Conditional Operator( 更多信息在这里 )。 我非常喜欢语法,我认为它使代码更具可读性,但我认为当你遇到一个本身可能为null的对象上的属性值时,代码究竟要做什么是值得怀疑的。 例如,如果我有一个带有十进制属性的类,并且我想要对该十进制值进行条件检查,我会写如下: if (foo?.Bar > max) { // do something } 从表面上看,这看起来很棒……如果foo不为null,则获取Bar的值并检查它是否大于最大值,如果是,则执行某些操作。 但是,如果foo为null会怎么样?! 有关C#6的新function和改进function的文档说明了以下内容: 如果实际上对象的值为null,则null条件运算符将返回null。 它将对Bar的调用短路,并立即返回null,避免编程错误,否则会导致NullReferenceException。 我在这里写了一个小提琴,它表明它确实有效,并且正在做我期待它做的事情但是我无法理解它是如何决定条件的结果的。 短路如何等于假 ? 在我的脑海中,这段代码现在要说“如果foo为null,检查null是否> max,这是不可能的,所以返回false”或“如果foo为null,那么foo!= null将返回false,所以你得到一个假“但文档说null条件检查返回null,而不是false。

是C#6? (Elvis op)线程安全吗? 如果是这样,怎么样?

提前道歉:这个问题来自一个试图学习高级C#的核心,未经改革的C ++开发人员。 考虑以下: if (myUserDefinedObject != null) { myUserDefinedObject.ToString(); } 这显然不是线程安全的。 另一方面,我看过两个教程说? (例如,Null条件运算符或’Elvis运算符’) myUserDefinedObject?.ToString(); IS线程安全。 除非编译器将[mutex?]锁定在它下面(颤抖),否则我不明白这是怎么回事。 如果这个成语是线程安全的,有人可以指出我如何完成的技术描述? 如果它不是线程安全的,那么有没有人有一个实际上说它不是的引用?

在赋值的左侧使用空条件运算符

我有几个页面,每个页面都有一个名为Data的属性。 在另一个页面上,我正在设置这样的数据: if (MyPage1 != null) MyPage1.Data = this.data; if (MyPage2 != null) MyPage2.Data = this.data; if (MyPage3 != null) MyPage3.Data = this.data; 有没有可能在MyPage上使用空条件运算符? 我在考虑这样的事情: MyPage?.Data = this.data; 但是当我这样写时,我收到以下错误: 赋值的左侧必须是变量,属性或索引器。 我知道这是因为MyPage可能为null,左侧不再是变量。 这不是我不能像我已经拥有它那样使用它但我只是想知道是否有可能在此使用空条件运算符。