【问题标题】:Object reference not set to an instance of an object when attempting to assign array from list尝试从列表中分配数组时,对象引用未设置为对象的实例
【发布时间】:2013-06-28 19:21:41
【问题描述】:

我正在尝试创建一个二维数组,它以字符串形式保存注册表的根键及其子键,所以我希望数组是

string[rootkeys][subkeys]

但由于某种原因,在分配时我得到了NullReferenceException

对象引用未设置为对象的实例。

这是我的代码。关于我做错了什么有什么想法吗?

    public string[][] getAllRootSubKeys(){
        int i = 0;
        int h = 0;
        var allRoots = new List<RegistryKey> {Registry.ClassesRoot, Registry.CurrentUser, Registry.LocalMachine, Registry.Users, Registry.CurrentConfig};

        string[][] rootAndKey = null;

        foreach (var root in allRoots) {
            rootAndKey[i][h] = root.GetSubKeyNames()[h];
            h++;
            if (h == root.SubKeyCount) {
                i++;
                h = 0;
            }
        }
        return rootAndKey;
    }

【问题讨论】:

    标签: c# arrays list multidimensional-array registry


    【解决方案1】:

    在尝试将元素分配给它之前,您永远不会初始化rootAndKey。你的循环逻辑对我来说也有点好笑。我猜你需要类似的东西:

    string[][] rootAndKey = new string[allRoots.Count][];
    
    for(var i = 0; i < allRoots.Count; i++)
    {
        var subkeys = root.GetSubKeyNames();
        rootAndKey[i] = new string[subkeys.Length];
        for(var h = 0; h < subkeys.Length; h++)
        {
            rootAndKey[i][h] = subkeys[h];
        }
    }
    

    【讨论】:

    • @Servy - 正在编写一些示例代码。把它包括在那里。
    • 我试过这样初始化:string[][] rootAndKey = new string[allRoots.Count][];但我得到了同样的例外,因为正如Servy所说我需要初始化数组的所有元素......?但我不确定我将如何工作,因为我需要数组能够获取尽可能多的子键(这并不总是相同的数量。)
    • @JBeck - 我提供了一个完整的代码示例,其中涉及初始化数组的两个部分。
    • 好吧太棒了!我按照您的建议使用了代码!正是我需要的谢谢!
    猜你喜欢
    • 2020-11-03
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多