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

时间:2018-02-02 14:22:43

标签: c# resharper

我有一个包含100个属性的对象。 Resharper或Visual Studio 2017中是否有一个功能可以为对象的所有属性生成代码。 e.g。

concat :: [[a]] -> [a]

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

2 个答案:

答案 0 :(得分:1)

输入这么多:

var myObject = new ObjectWithMultipleProps {

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

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

答案 1 :(得分:0)

您似乎对创建实例的含义存在误解。实例化对象(这是您调用new ...时)无法为任何成员设置任何值。所有这些成员都从运行时初始化为该成员类型的默认类型。特别是你不能部分初始化你的对象,即只将某些成员设置为初始值,而不是设置其他成员。创建实例是一种全有或全无的操作。

所以如果你只是写这个:

var myObject = new ObjectWithMultipleProps();

myObject 中的所有属性都有其defualt值。你甚至可以打印它们:

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初始化为null,您就会得到NullReferenceException,因为您无法呼叫null上的任何成员。

如果你想要你的成员的其他默认值,你必须创建构造函数并在那里设置值。