Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建顶层时初始化对象的完整图形,以防止为空_C# - Fatal编程技术网

C# 创建顶层时初始化对象的完整图形,以防止为空

C# 创建顶层时初始化对象的完整图形,以防止为空,c#,C#,如果我想初始化一个包含其他对象的对象,那么最小化代码和防止空引用异常的最佳方法是什么 示例代码(另见:) 此代码将引发空引用异常,因为“Level2Prop”尚未实例化。我意识到我可以在“Level1”类的构造函数中实例化“Level2Prop”(以及在“thr”Level2类的构造函数中实例化“Level3Prop”),但是如果每个孩子都有很多对象属性,并且对象图非常深,那就需要大量的键入 有更好的方法吗?通过构造函数使用初始化,并使属性不可变(仅限get)或使用属性初始值设定项。没有“最佳”

如果我想初始化一个包含其他对象的对象,那么最小化代码和防止空引用异常的最佳方法是什么

示例代码(另见:)

此代码将引发空引用异常,因为“Level2Prop”尚未实例化。我意识到我可以在“Level1”类的构造函数中实例化“Level2Prop”(以及在“thr”Level2类的构造函数中实例化“Level3Prop”),但是如果每个孩子都有很多对象属性,并且对象图非常深,那就需要大量的键入


有更好的方法吗?

通过构造函数使用初始化,并使属性不可变(仅限get)或使用属性初始值设定项。没有“最佳”方法。或者依赖项注入(IoC容器)可能会有所帮助。但这需要一些重构
using System;

public class Program
{
    public static void Main()
    {
        Level1 level1 = new Level1();
        level1.Level2Prop.Level3Prop.StringProp = "A value";

        Console.WriteLine("Prop has been assigned the value:" + level1.Level2Prop.Level3Prop.StringProp);

    }

}

public class Level1
{
    public Level2 Level2Prop {get; set;}

}

public class Level2
{
    public Level3 Level3Prop {get; set;}
}

public class Level3
{
    public string StringProp {get; set;}
}