【问题标题】:list object of struct is never assigned to and will always have its default value nullstruct 的 list 对象永远不会分配给它,并且始终具有其默认值 null
【发布时间】:2019-02-09 14:41:53
【问题描述】:

我应该如何初始化一个结构列表。 可以初始化 Struct,但只需使用我的列表,它会说: 文件夹永远不会分配给它,并且将始终具有其默认值 null

private struct directories
        {
            public List<string[]> Folder;
        }



directories d1 = new directories();
d1.Folder.Add(Directory.GetDirectories(path1));

【问题讨论】:

    标签: c# list struct null initialization


    【解决方案1】:

    结构的问题在于它们的构造函数不能保证运行。例如,当您创建数组 var array = new directories[10]; 时。因此结构体不能有初始值设定项和显式无参数构造函数。

    在本例中,我使用延迟初始化来确保初始化文件夹列表。

    private struct directories
    {
        private List<string[]> _folder;
        public List<string[]> Folder
        {
            get {
                if (_folder == null) {
                    _folder = new List<string[]>();
                }
                return _folder;
            }
        }
    }
    

    但在这种情况下,我将简单地使用来自 System.IO 命名空间的现有 DirectoryInfo Class。它可以为您做到这一点以及更多。不要重新发明轮子。

    DirectoryInfo rootDir = new DirectoryInfo(path1);
    DirectoryInfo[] directories = rootDir.GetDirectories("*", SearchOption.AllDirectories);
    

    GetDirectoriesGetFiles 都有重载,允许您指定搜索模式以及是否要递归子目录。

    【讨论】:

    • 感谢您的快速回复,但也许我应该输入更多代码。我试图获取的不仅仅是根目录的目录。还有根目录和根目录中的目录。像一个根目录的所有子文件夹一样。
    • 所以我的想法是为此任务使用两个循环: for (int counter1 = 0; counter1
    • rootDir.GetDirectories("*", SearchOption.AllDirectories) 会得到你所有的目录,包括子目录和子子目录等。这就是我所说的“递归子目录”。请参阅:GetDirectories(String, SearchOption)
    • 太尴尬了,我错过了。 THX 解决了。这是我的代码:foreach(Directory.GetDirectories(path1,“*”,SearchOption.AllDirectories)中的字符串folder1)){
    • 您好,我在编辑后发现了一个问题。我遇到了网络驱动器的新错误,发生了意外错误,并且在抛出异常后我的列表不会被填充。此外,当我将 C 盘作为路径时,回收站显示未经授权的访问,我的列表将再次为空。你有想法吗?是不是 alldirectories 选项造成的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多