При оценке соединенных каналов разногласия и бунт очевидны. Однако IRC представляет собой более сложный сценарий, поскольку отдельные конфигурации IRC не имеют явных имен и вместо этого представлены как коллекция.
Я создал такую конфигурацию:
Код: Выделить всё
[[bridge]]
[bridge.chat]
discord = ""
revolt = ""
libera = "#"
oftc = "#"
Поскольку ключ может быть, а может и нет существует и может содержать любое ранее указанное имя, я создал определение анонимного типа для службы моста:
Код: Выделить всё
public class bridges
{
string bridgeName = "";
Dictionary ircChannels = new Dictionary();
string revoltChannel = "";
ulong discordChannel = 0;
bool hasIrcConnection = false;
...
//getters/setters
...
}
Примечание. Это часть более крупного случая переключения, в котором определяются первоначальные соединения< /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;
Подробнее здесь: https://stackoverflow.com/questions/789 ... ables-here
Мобильная версия