尝试从列表中分配数组时,对象引用未设置为对象的实例

时间:2013-06-28 19:21:41

标签: c# arrays list multidimensional-array registry

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

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;
    }

1 个答案:

答案 0 :(得分:3)

在尝试为其分配元素之前,您永远不会初始化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];
    }
}