Есть ли лучший способ перебора вложенных таблиц? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли лучший способ перебора вложенных таблиц? [закрыто]

Сообщение Anonymous »

Я создаю выделенную службу моста между Discord, Revolt и двумя отдельными сетями IRC. Я пытаюсь сделать это в некоторой степени анонимно, так как хочу, чтобы услугу можно было легко настроить для других людей с такими же потребностями.
При оценке соединенных каналов разногласия и бунт очевидны. Однако IRC представляет собой более сложный сценарий, поскольку отдельные конфигурации IRC не имеют явных имен и вместо этого представлены как коллекция.
Я создал такую ​​конфигурацию:

Код: Выделить всё

[[bridge]]
[bridge.chat]
discord = ""
revolt = ""
libera = "#"
oftc = "#"
Здесь ключ не является обязательным. кроме того, ключи libera и oftc могут быть названиями любой сети, если они указаны ранее в конфигурации.
Поскольку ключ может быть, а может и нет существует и может содержать любое ранее указанное имя, я создал определение анонимного типа для службы моста:

Код: Выделить всё

public class bridges
{
string bridgeName = "";

Dictionary ircChannels = new Dictionary();
string revoltChannel = "";
ulong discordChannel = 0;
bool hasIrcConnection = false;
...
//getters/setters
...
}
Затем я перебираю конфигурацию (которая представлена ​​в виде вложенной таблицы вложенных таблиц вложенных таблиц и т. д.), извлекая соответствующие данные и заполняя экземпляры мостов< /code>, который затем можно добавить в список того же самого:
Примечание. Это часть более крупного случая переключения, в котором определяются первоначальные соединения< /sup>

Код: Выделить всё

case "bridge":
foreach(TomlTable table in tArr)
{
foreach(string tableKey in table.Keys)
{
bridges bridge = new bridges();
bridge.BridgeName = tableKey;
foreach(var item in (TomlTable)table[bridge.BridgeName])
{
switch (item.Key)
{
case "discord":
bridge.DiscordChannel = (ulong)item.Value;
break;
case "revolt":
bridge.RevoltChannel = (string)item.Value;
break;
}
foreach (string server in ircCommunityNames)
//    note: ircCommunityNames is a list of strings
//    filled in the earlier connection evaluation
//    methods. In this case, it could be demonstrated
//    in written code as: ["libera", "oftc"]
{
if(server == item.Key)
{
bridge.IrcChannels.Add(server, (string)item.Value);
}
}

}
if(bridge.IrcChannels.Count > 0)
{
bridge.HasIrcConnection = true; //Avoids unnecessary evaluation of the enumerable
}
bridgeConfigs.Add(bridge);

}
}
break;
В идеале мне бы хотелось избегать использования нескольких подходов оценки друг к другу. Использование foreach для перебора одной и той же пары ключ-значение, которая только что была протестирована в случае переключения, кажется неэффективным. Есть ли здесь лучший подход?

Подробнее здесь: https://stackoverflow.com/questions/789 ... ables-here
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»