|
|
1
27
我同意你的观点??运算符的使用通常是有限的——如果某个值为空,则提供一个回退值很有用,但在希望继续深入到有时为空引用的属性或方法中时,防止空引用异常并不有用。
嗯,还有什么比这更重要的??是一个“空解引用”运算符,允许您将长属性和/或方法链链接在一起,例如
幸运的是,似乎C团队意识到了这一特性差异。看到这个 connect.microsoft.com suggestion 对于C团队,向C语言添加一个空的取消引用操作符。
如果您还希望在C中使用此功能,请将您的投票添加到 suggestion 在连接站点上!-) 我用来解决这个特性的一个解决方法是扩展方法,如中所描述的 this blog post ,允许这样的代码:
此代码或者返回
|
|
|
2
32
这个
|
|
|
3
22
我通常将它用于字符串或可以为空的类型。
比容易
或
|
|
4
11
我经常将它用于属性中延迟实例化的对象,例如
这充分利用了这样一个事实:在C中,赋值是一个表达式,因此您可以在同一语句中分配和使用表达式的结果(赋值)。我仍然觉得这个代码模式有点脏,但是它比其他的(下面)更简洁,所以它只是关于胜利。
|
|
|
5
8
与fyi一样,三元运算符从空合并运算符生成不同的IL序列。第一个看起来像这样:
后者看起来是这样的:
基于此,我认为空合并操作符是为其目的而优化的,而不仅仅是语法上的糖分。 |
|
|
6
7
是吗??是有效的空检查运算符。 您的代码遇到问题的原因是,如果“someobject为空,那么.somemember是空对象上的属性”。您必须先检查某个对象是否为空。 编辑: 我应该补充一下,是的,我确实找到了??非常有用,特别是在处理数据库输入时,特别是从LINQ输入,但在其他情况下也同样有用。我用得很重。 |
|
7
3
我一直把它和app.config一起使用
|
|
|
8
2
最有用的是处理可为空的类型。
没有??你需要写下以下内容,这更让人困惑。
我发现这个操作符对于可以为空的类型非常有用,但除此之外,我发现自己并没有经常使用它。绝对是一条很酷的捷径。 |
|
|
9
1
我使用它来处理在正常操作下可以返回空值的方法。 例如,假设我有一个容器类,它有一个get方法,如果容器不包含键(或者空是有效的关联),则该方法返回空值。然后我可能会这样做:
显然,这两个序列是等效的:
第二个只是更简洁。 |
|
|
10
1
用更紧凑的形式替换冗长的语法通常是个不错的主意。但通常情况下,它只是混淆了代码,而没有真正获得任何信息。现代标准提倡使用更长、更具描述性的变量名,并使用更详细的布局样式,以使代码更具可读性和可维护性。 如果我要训练我的大脑快速分析??,我需要找到一种情况,在这种情况下,它显示出一种明显的优势——某种不能用另一种方式完成的事情,或者某种可以节省大量输入的地方。 这是哪里??为我跌倒。它是有用的,所以很少,而且?:如果/否则是如此快速和易读的替代方案,那么使用不同的语法并没有什么新的意义。 A=B??C??D?听起来不错。但我从来没必要这么做! 我觉得恼人的是我想用它?但每次我想“哦,也许我能用?”“这里”,我意识到我不想使用对象本身,而是它的一个成员。 name=(user==null)?“doe“:user.surname; 不幸的是,??对这里没有帮助。 |
|
|
11
1
在您的案例中,您可以将DefaultObject创建为静态属性,并使用如下所示…
其中,DefaultObject将返回静态只读对象。 像eventargs.empty、string.empty等… |
|
|
12
0
我和你有同样的问题,但是在使用linqtoxml的空间中,标记可能不在文档中,所以使用
既然C中没有全局变量这类东西,所有的东西都在一个类中,所以我发现,像你一样??基本上是无用的。 即使是一个简单的属性getter,比如:
可能最好是用初始值设定项… 我认为和SQL中的情况一样,它在LINQ查询中会有一定的用处,但目前我还不能真正派生出一个。 |
|
|
13
0
我经常在将字符串解析为其他数据类型时使用空合并运算符。我有一组扩展方法,它们包装了int32.typarse之类的东西,并返回一个可以为空的int,而不是将输出参数公开给我的其余代码。然后我可以在一行代码中解析一个字符串并在解析失败时提供一个默认值。
|
|
|
A B · C#Excel自动调整列避免长文本时出错 11 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 11 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 11 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |