【问题标题】:Curly Braces In C#C# 中的花括号
【发布时间】:2020-08-20 18:27:46
【问题描述】:

我正在玩一些代码,我想知道是否有人能告诉我这段代码中的花括号代表什么。我以为它会是一个空对象,但事实并非如此。

 Person person = new Person{};

            if (person is {}){
                Console.WriteLine("Person is empty.");
            } else {
                Console.WriteLine("Person is not empty.");
            }

它编译得很好;但是如果我填充了 person 类的属性,它仍然属于 person 是 if 语句的空白部分。

【问题讨论】:

  • 这里有花括号的三种不同用法(块、对象初始化器、模式匹配),以及其中两个的解释链接。如需可用的答案,请指明您要问的是哪一个。
  • 我猜你回答了我的问题。我指的是 if 语句,其中 person 是 {} ;所以我假设这是为了模式匹配。
  • @Crow: 错误的卷发 :-) - 它 () 表示“不为空”

标签: c# syntax


【解决方案1】:

{} 在此上下文中表示任何类型的模式匹配,以检查实例是否不为空:

if(person != null){     //the same as: if(person is {})...

}

它类似于模式匹配的 var 关键字,因此您无需显式指定/重复类型(尽管您知道)。

if(GetPersonFromDb() is {} person){     //the same as: var person = GetPersonFromDb(); if(person != null)...

}

更多信息(参见特殊匹配表达式部分):https://hackernoon.com/whats-pattern-matching-in-c-80-6l7h3ygm

【讨论】:

  • 谢谢。仍然认为GetPersonFromDb() is var person 对大多数 C# 开发人员来说会更清楚,而且我们不会搜索“它的含义”。 :) 我想念老 C# 团队,他们在引入这样的“新”东西时非常难以推销。
猜你喜欢
  • 2018-05-02
  • 1970-01-01
  • 2012-09-12
  • 2019-01-26
  • 2014-02-16
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多