【问题标题】:C# object initializers - Include the constructor call parentheses? [duplicate]C# 对象初始值设定项 - 包括构造函数调用括号? [复制]
【发布时间】:2020-12-01 15:10:04
【问题描述】:

我是一名新的 C# 开发人员。

我有一个班级员工

声明带有和不带有“()”的对象时有区别吗? Visual Studio 不标记错误 .例如

Employee newEmployee = new Employee() { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

Employee newEmployee = new Employee { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

【问题讨论】:

  • 不,没有区别。不是错误,所以VS不会将其标记为一个。
  • 除了可读性之外没有区别。我发现第一个变体更具可读性,因为它提醒我们正在调用无参数构造函数。
  • 注意微软appears to favor omitting the parentheses如果无参数构造函数被调用(你可以“混合和匹配”参数化构造函数和对象初始化)。
  • new Employee() new Employee {}new Employee() {} 都是等价的。

标签: c# object


【解决方案1】:

您获得的代码示例没有任何区别。括号是完全可选的。

不过,差异会出现在几个变体中:

首先,如果您的 Employee 类有一个您想要为其提供参数的非默认构造函数,则您不能在仍将参数传递给构造函数的同时省略括号。

Employee newEmployee = new Employee(employeeId) { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

第二个:C# (9) 的下一个版本,其中类型定位得到了改进,因此如果您已经声明了要创建的类型,则无需包含类的名称:

Employee newEmployee = new() { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };

在这种情况下省略括号会使编译器认为您正在尝试创建匿名类型。

【讨论】:

    【解决方案2】:

    “()”中的括号和内容称为constructor。如果您的类不需要任何参数,则可以在不带括号的情况下实例化对象。看看this,它提供了多个示例,说明如何实例化带括号和不带括号的对象。

    希望你喜欢 C#

    【讨论】:

    • @mjwills 已更新 - 谢谢。
    【解决方案3】:

    如果你没有向构造函数传递任何参数,那么你可以跳过左括号和右括号。

    您可以阅读更多关于它的信息here

    Cat cat = new Cat { Age = 10, Name = "Fluffy" };
    Cat sameCat = new Cat("Fluffy"){ Age = 10 };
    

    Cat 类具有重载的构造函数,因此您可以将 Name 作为参数传递。

    【讨论】:

      【解决方案4】:

      这些是匿名的对象初始化器。有两种情况:

      • 当必须在构造函数中传递某些东西时,必须使用() 括号。
      Employee newEmployee = new Employee("David") { LastName = "HasselHoff", Email_ID ="dh@fdh.com" };
      
      • 如果不必在构造函数中传递某些内容,则可以选择是否使用() 括号。
      Employee newEmployee = new Employee { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };
      Employee newEmployee = new Employee() { FirstName = "David", LastName = "HasselHoff", Email_ID ="dh@fdh.com" };
      

      这两个是一样的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-09
        • 2023-03-05
        • 2018-11-29
        • 1970-01-01
        • 2020-02-21
        • 2020-04-11
        • 2020-12-25
        • 2011-05-31
        相关资源
        最近更新 更多