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

c#

在 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()隐式实现吗?

让我避免 Name is not initialized 异常。我知道我可以做我自己的构造函数并在其中初始化它的属性,但是已经完成了很多代码并且不再可行了。

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

回答

你不能隐式实例化一个属性,不。它必须在某处实例化。

为了启用您想要的语法,您可以做的是在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

但显然这有其自身的副作用 - 我不知道您是否想强制它始终以这种方式实例化,或者您的应用程序中是否存在不需要的场景。


PS 你说出现这种情况是因为你是

将 json 对象映射到类

...但肯定这是应该由自动序列化库完成的事情,而不是将所有这些实例化写在文字中。目前还不清楚具体是什么场景。我已经直接回答了您的问题,但我可能会质疑这是否真的是解决您的整体问题的最佳方法。


以上是C#:如何初始化一个对象及其所有属性的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>