Я бы многое изменил в вашем коде, чтобы решить эту проблему.
Во-первых, сохраните все ваши условия в Словаре, подобном этому
Dictionary<string, string> keywords = new Dictionary<string, string>{
{"LogCustomization: --> TW", "Wraith"},
{"LogCustomization: --> TR", "Trapper"},
{"LogCustomization: --> Sw", "Oni"},
... add the other keys here ....
};
В словаре, который вы хранить в качестве ключей все условия, которые вы хотите проверить, с помощью слова "SwedenKiller", сокращенного до двух букв. В значении словаря сохраните значение, которое вы хотите использовать при извлечении этой конкретной строки.
На этом этапе ваш код может быть значительно сокращен с помощью этого
// Load all data in memory in the variable allData
var allData = File.ReadAllLines("");
// Loop using a normal loop. This will allow to use the variable x as an indexer
// to retrieve the lines before the current one....
for (int x = 0; x < allData.Length; x++)
{
string line = allData[x];
// Discard the lines that doesn't start with the LogCustomization words
if (line.StartsWith("LogCustomization: --> "))
{
// Take the words and two more characters
string sub = line.Substring(0, 22);
// Check if the substring is listed in the keywords dictionary
if (keywords.ContainsKey(sub))
{
// Take the value and ....
string killer = keywords[sub];
if (x > 0)
{
// Take the previous line (x-1)
string prevLine = allData[x - 1];
if (x > 1)
{
// Take the previous previous line (x-2)
string prevprevLine = allData[x - 2];
// Here goes your real logic with kille e prev lines.
Console.WriteLine($"current={line}, prev={prevLine}, prevprev={prevprevLine}");
}
}
}
}
}