【问题标题】:C# Var vs Target-typed newC# Var vs Target-typed new
【发布时间】:2020-05-21 17:19:21
【问题描述】:

C#9 几天前是officially announced。一种新的语言特性是“目标类型的新表达式”,在使用上感觉与var 非常相似。比较以下声明,我很好奇哪一个性能更高(如果有的话),以及在不同的上下文中应该首选哪种语法。

var person = new Person()Person person = new().

对于收藏:

var people = new[] {
    new Person(),
    new Person(),
    new Person(),
}

var people = new Person[] {
    new(),
    new(),
    new(),
}

【问题讨论】:

  • 你所说的性能是什么意思,它是一个编译器特性,对运行时没有任何影响
  • 我怀疑在生成的 IL 方面有什么真正的区别
  • @MatJ 我在网上找到的关于var 的所有内容都将其与显式类型声明进行比较,或者要求在成员声明中允许使用它。这个 C#9 语法很新,所以我想我会问这个问题。我也不知道编译器是如何工作的,所以我不知道它是否有运行时影响

标签: c# var variable-declaration


【解决方案1】:

var person = new Person()Person person = new() 将编译为相同的 IL 代码。它们只是告诉编译器初始化哪种类型的两种不同方法;它们与运行时性能没有任何关系。

【讨论】:

  • 谢谢@Giorgi!我不知道生成的 IL 是否有任何差异。我认为我个人喜欢 var 用于单个变量,因为所有声明都可以在左侧排列,而目标类型 new 用于集合,因此重复更少。
  • 目标类型 new 对于包含泛型的类级字段特别有用。比如private readonly Dictionary<string, SomeLongTypeName> _dict = new Dictionary<string, SomeLongTypeName>();private readonly Dictionary<string, SomeLongTypeName> _dict = new();
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 2018-03-16
  • 1970-01-01
  • 2020-09-03
  • 2011-03-14
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多