奇怪的C#语法

Sea*_*ean 3 c# conditional-statements

我刚刚发现了这种语法:

date1 = date2?.ToString("yyyy-MM-dd") ?? date3;
Run Code Online (Sandbox Code Playgroud)

当然,这是我第一次看到这样的语法,我不理解它.经过调试,我明白它相当于:

if(date2 != null)
   date1 = date2.ToString("yyyy-MM-dd");
else
   date1 = date3;
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么引入这种语法,因为它根本不易读,它只是节省了3行文本?

编辑:我的问题是关于?操作员,不是??

Pat*_*man 11

该声明不仅节省了3行,它更具可读性并且还省去了代码块,这对于允许更复杂的LINQ查询非常重要.

你觉得这两个怎么样?

var x = collection.Select(x => new SomeClass(x?.Property ?? "default"));
Run Code Online (Sandbox Code Playgroud)

反对:

var x = collection.Select(x => 
                               {
                                   string value = null;
                                   if (x != null)
                                   {
                                       value = x.Property;
                                   }

                                   if (value == null)
                                   {
                                       value = "default";
                                   }

                                   return new SomeClass(value);
                               }
                         );
Run Code Online (Sandbox Code Playgroud)

第一个是更具表现力和更强大的.如果您有多个房产怎么办?