代码之家  ›  专栏  ›  技术社区  ›  doorman

新建对象时生成道具的代码

  •  0
  • doorman  · 技术社区  · 6 年前

    我有一个具有100个属性的对象。Resharper或Visual Studio 2017中是否有为对象的所有属性生成代码的功能。例如

    var myObject = new ObjectWithMultipleProps
    {
       Prop1 = "",
       Prop2 = 0,
       Prop3 = "",
       ...etch
    }   
    

    我正在创建单元测试,如果可能的话,它会加快速度。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Wyck    6 年前

    键入以下内容:

    var myObject = new ObjectWithMultipleProps {
    

    然后按 Ctrl键 + J , 选项卡 . 下一个未使用的字段或属性将自动完成。您可以按 Ctrl键 + J 再次,它将弹出字段的类型,以便您可以选择适当的值。或者你可以开始打字 new 然后按 Ctrl键 + J 它会自动为您完成输入。

    然后键入逗号,并对每个字段重复此过程。您已经指定的字段将不会显示在列表中。如果不想为字段设置值,则从初始值设定项列表中省略它,它将获得其默认值。

        2
  •  0
  •   MakePeaceGreatAgain    6 年前

    你似乎对什么有误解 创建实例 方法实例化对象没有方法(这是您调用 new ... )对您的任何成员都没有价值。所有这些成员都从运行时初始化为该成员类型的默认类型。尤其是你不能 部分初始化 您的对象,即仅将一些成员设置为初始值,而不设置其他成员。创建实例是一个全有或全无操作。

    因此,如果你简单地写下:

    var myObject = new ObjectWithMultipleProps();
    

    内的所有属性 myObject 有他们的价值。您甚至可以打印它们:

    Console.WriteLine(myObject.Prop2);  // this will print 0
    

    当然,您可以将所有这些作业写入类的构造函数中:

    class ObjectWithMultipleProps
    {
        public ObjectWithMultipleProps()
        {
            Prop1 = null;
            Prop2 = 0;
        }
    }
    

    然而,这具有完全相同的效果。

    不管怎样,可能发生的是 NullReferenceException . 这是因为所有引用类型默认为 null ,对这些成员进行任何调用都会导致该异常,如以下代码所示:

    var a = myObject.Prop1.SubsString(0, 1);
    

    Prop1 初始化为 无效的 创建完实例后,您将得到 NullReferenceException ,因为您无法呼叫上的任何成员 无效的 .

    如果希望成员具有其他默认值,则必须创建构造函数并在其中设置值。