结构体中List未初始化报错,如何正确初始化结构体中的List?
解决结构体中List未初始化的问题
嘿,这个问题其实很常见——你定义的结构体里的Folder是引用类型(List<string[]>),当你用new directories()创建结构体实例时,引用类型成员的默认值是null,直接调用Add自然会触发空引用相关的报错。下面给你几种靠谱的解决办法:
方法1:给结构体添加构造函数初始化List
你可以在结构体里写一个构造函数,在创建实例的时候就把Folder初始化好:
private struct directories { public List<string[]> Folder; // 添加构造函数,确保Folder被初始化 public directories(List<string[]> folder) { Folder = folder ?? new List<string[]>(); // 如果不需要外部传入List,也可以直接写 Folder = new List<string[]>(); } } // 使用构造函数创建实例 directories d1 = new directories(new List<string[]>()); d1.Folder.Add(Directory.GetDirectories(path1));
方法2:实例化结构体后手动初始化List
如果不想修改结构体定义,也可以在创建实例后,先给Folder赋值一个新的List对象,再调用Add方法:
private struct directories { public List<string[]> Folder; } directories d1 = new directories(); // 先初始化Folder,避免null d1.Folder = new List<string[]>(); d1.Folder.Add(Directory.GetDirectories(path1));
方法3:使用对象初始化器简化代码
用对象初始化器可以在创建结构体实例的同时完成Folder的初始化,写法更简洁:
private struct directories { public List<string[]> Folder; } // 直接在实例化时初始化Folder directories d1 = new directories { Folder = new List<string[]>() }; d1.Folder.Add(Directory.GetDirectories(path1));
另外提个小建议:C#里结构体名称通常采用帕斯卡命名法(比如Directories而不是directories),这是社区通用的编码规范,能让代码可读性更好哦~
内容的提问来源于stack exchange,提问作者M.J
相关产品推荐
相关产品推荐

