C#6中的空条件运算符和字符串插值

Chi*_*ils 18 c# roslyn c#-6.0

执行空条件运算符插值字符串语法的决心,只是语法糖

空条件运算符(?.)允许通过减少"过度" null检查来清理代码,而插入的字符串(("\{X}, \{Y}"))将参数和格式合并为一,是C#6中的新功能.

这些是否被编译成他们不受欢迎的对应物(即我们试图避免的丑陋代码)?

我为这个天真的问题道歉,我对语言一般都没有最好的理解,但我很好奇是否可以在C#5上运行这些功能.

我知道在某些情况下Java就是这种情况,这些例子也是如此吗?

i3a*_*non 31

没有一般规则,它有所不同.一些功能只是语法糖,一些功能以前是不可能的,有些是两者的组合.

句法糖

新功能

当然,这两个类别中都有更多功能,例如异常过滤器和表达式身份成员.

  • 1.`var result = GetString()?? string.Empty;`2.` var result = GetString()?. Length` (4认同)
  • @ChiefTwoPencils那些是不同目的的不同运营商.`??`是空合并运算符.`?.`是空条件运算符(或安全导航运算符) (2认同)

Pau*_*ado 10

与C#6.0中的大多数新功能一样,如果要使用的变量的实例不为null,则空条件运算符只是简写(语法糖,如果要调用它),以获取成员值的模式.

鉴于一种s类型string,这个:

int? l = s?.Length;
Run Code Online (Sandbox Code Playgroud)

被翻译成:

int? l = s == null ? null : s.Length;
Run Code Online (Sandbox Code Playgroud)

它可以与null合并运算符(??)结合使用:

int l = s?.Length ?? 0;
Run Code Online (Sandbox Code Playgroud)

字符串插值也作为速记开始,string.Format但演变为可以产生一个string或一个的模式IFormatble.请参阅当前规范以获取更多信息.

顺便说一句,roslyn是编译器平台的代号,而不是语言或它们的功能.