Я сижу здесь, обнаружив, что я пишу рекурсивный вызов для C#, чтобы написать RegistryKey
.C# Рекурсивные вызовы и массивы
Это то, что я мог бы жестко кодировать достаточно легко, но я бы сделал это рекурсивно.
using System;
using System.Collections.Generic;
using Microsoft.Win32;
private const string regKeyPath = @"Software\Apps\jp2code\net\TestApp";
static void Main() {
string[] split = regKeyPath.Split('\\');
RegistryKey key = null;
try {
keyMaker(Registry.LocalMachine, split);
} finally {
if (key != null) {
key.Close();
}
}
// continue on with Application.Run(new Form1());
}
Итак, keyMaker
, что я хочу, чтобы моя рекурсивная функция.
private static void keyMaker(RegistryKey key, string[] path) {
string subKey = null;
string[] subKeyNames = key.GetSubKeyNames();
foreach (var item in subKeyNames) {
if (path[0] == item) {
subKey = item;
}
}
RegistryKey key2 = null;
try {
if (String.IsNullOrEmpty(subKey)) {
key2 = key.CreateSubKey(subKey);
} else {
key2 = key.OpenSubKey(subKey);
}
keyMaker(key2, &path[1]); // <= NOTE! Not allowed/defined in C#
} finally {
key2.Close();
}
}
Итак, я не могу просто передать массив, начиная со следующего элемента массива.
Есть ли опрятный способ сделать это на C#?
Реестр бит не имеет ничего общего с проблемой, но для того, чтобы добавить проблему с реальным миром к задаче массива.
Не уверен, что это выгодно для вас, но есть класс под названием «ArraySegment», который вы можете использовать для передачи оставшейся части массива путей (без выделения новых массивов и позволяет вернуться к оригиналу). – mpen