我有一个包含100个属性的对象。 Resharper或Visual Studio 2017中是否有一个功能可以为对象的所有属性生成代码。 e.g。
concat :: [[a]] -> [a]
我正在创建单元测试,如果可能的话,它会加快速度。
答案 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
上的任何成员。
如果你想要你的成员的其他默认值,你必须创建构造函数并在那里设置值。