C#:如何初始化对象及其所有属性

  • 本文关键字:属性 对象 初始化 c# oop
  • 更新时间 :
  • 英文 :


C#中是否有任何方法可以在不需要初始化其属性的情况下初始化对象以使用它们?

我发现自己将json对象映射到类中,我想知道这样做是否无效:

Class1 object1 = new Class1 ();
object1 .Name = new Class2 ();
object1 .Name.Content = "name";

我不想为了代码的清晰性而使用初始化器来避免像这样的东西

Class1 obj1 = new Class1 ()
{
Name = new Class2()
{
Content = "name"
}              
};

这看起来不错,但我必须使用的模型通常很大,有很多层,如果我使用初始化器,最终会变成一个不可读的集群。

我不能改变我收到的模型,所以简化模型也不是一个选择。

有什么办法可以让我做这样的事情吗:

Class1 object1 = new Class1 ();
object1.Name.Content = "name";

自动隐式实现Name = new Class2()

允许我避免出现"名称未初始化"异常。我知道我可以创建自己的构造函数,并在其中初始化它的属性,但已经完成了很多代码,现在已经不可行了。

如果不可能的话,我对任何其他方法感兴趣,这些方法可以帮助我减少一些代码初始化属性。

不能隐式实例化属性,不能。它必须在的某个地方实例化。

要启用所需的语法,可以Class1构造函数或属性声明中实例化它。例如:

public class Class1
{
public Class2 Name { get; set; } = new Class2();
}

演示:https://dotnetfiddle.net/ZySMLX

public class Class1
{
public Class2 Name { get; set; }
public Class1()
{
this.Name = new Class2();
}
}

演示:https://dotnetfiddle.net/Sbd2wP

但很明显,这有它自己的副作用——我不知道你是想强制总是以这种方式实例化,还是在你的应用程序中存在不希望这样的场景。


p.S.你说出现这种情况是因为你是

将中的json对象映射到类

。。。但这肯定是应该由自动化序列化库来完成的,而不是用文字来写所有这些实例化。目前还不清楚具体情况如何。我已经直接回答了你的问题,但我可能会质疑这是否真的是解决你整体问题的最佳方法。

最新更新