Как бы я взял это и превратил в метод, который исключает повторение (то есть, не повторяю себя), но также не делает нового распределения в боксе / объекте - или, по крайней мере, настолько мало, насколько это возможно.
private static IEnumerable<string> SeparateLineIntoMultipleDefinitions(string line) {
string[] splitEntries;
splitEntries = (from str in line.Split(new[] {", "}, StringSplitOptions.RemoveEmptyEntries)
where str.Contains('=')
select str).ToArray();
if (splitEntries.Length > 2) return splitEntries;
splitEntries = (from str in line.Split(',')
where str.Contains('=')
select str).ToArray();
if (splitEntries.Length > 2) return splitEntries;
splitEntries = (from str in line.Split(' ')
where str.Contains('=')
select str).ToArray();
if (splitEntries.Length > 2) return splitEntries;
return Enumerable.Empty<string>();
}
Первоначально я пытался создать такой метод:
IEnumerable<string> SplitEntries(object splitter) {
return splitter switch {
string[] strArray => (from str in line.Split(strArray, StringSplitOptions.RemoveEmptyEntries)
where str.Contains('=')
select str),
string s => (from str in line.Split(new[] {s}, StringSplitOptions.RemoveEmptyEntries)
where str.Contains('=')
select str),
char charSplitter => (from str in line.Split(charSplitter)
where str.Contains('=')
select str),
_ => Enumerable.Empty<string>()
};
}
Но, увы, вызов этого с помощью char
помещает символ в объект.
Для этого конкретного сценария я хочу, чтобы он попытался проанализировать ", "
, затем просто ','
, затем просто ' '
. Принимая во внимание, что если бы я просто позвонил
line.Split(',', ' ')
, я думаю, что он попытался бы разбить что-то вроде this=that,there x=y b=c
на this=that
, there
, x=y
, b=c
. Но я не хочу эту дополнительную запись there
.
Я бы использовал регулярное выражение, но я полагаю, что его использование не обеспечило бы более оптимизированное для памяти решение (возможная ложная предпосылка; я был бы рад быть доказанным неправильно). Несмотря на то, что может считаться чрезмерным проектированием, мне любопытно, каким будет решение, потому что у меня есть ощущение, что я упускаю что-то очень простое.