【问题标题】:What is new without type in C#?C# 中没有类型的新功能是什么?
【发布时间】:2021-11-24 16:31:34
【问题描述】:

C# 中没有类型的新功能是什么?

我在工作中遇到了如下代码:

throw new("some string goes here");

new("some string goes here") 是在 C# 中创建字符串的一种方式还是其他方式?

【问题讨论】:

  • 如果可能,您应该与您的团队讨论此功能的使用。 Dictionary<SomeVeryLongName, List<AnotherTooLongName>> _field = new() 很好用。你的例子不是。我们应用的规则是:完整类型应至少出现一次,首选var(根据习惯和与旧代码的一致性)。

标签: c# new-operator syntactic-sugar


【解决方案1】:

throw 的具体情况下,throw new()throw new Exception() 的简写。该功能是在 c# 9 中引入的,您可以在 Target-typed new expressions 中找到文档。

如您所见,有很多地方可以使用它(只要可以推断要创建的类型)来缩短代码。

我最喜欢的地方是字段/属性:

private readonly Dictionary<SomeVeryLongName, List<AnotherTooLongName>> _data = new();

作为补充说明,不鼓励使用throwing Exception,因为它在大多数情况下不够具体,所以我真的不建议使用throw new ("error");。有很多特定的异常可供使用,如果这些都不起作用,请考虑创建自定义异常。

【讨论】:

    【解决方案2】:

    new() 创建一个类型可以是inferred from context 的对象。

    所以而不是:

    throw new System.Exception("hi");
    

    您可以改用这个缩写形式:

    throw new ("hi");
    

    同样,

    var s = new string("hello");
    

    可以替换为:

    string s = new("hello");
    

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多