Дата начала заканчивается в третьей позиции в массиве:
startDate = filter.Split(new string[] { "start=", ";" }, StringSplitOptions.RemoveEmptyEntries)[2];
Вместо того, чтобы разбивать строку по одному разу для каждого значения, вы можете разделить ее на отдельные пары ключ-значение, а затемразбить каждую пару:
string[] pairs = filter.Split(';');
string[] values = pairs.Select(pair => pair.Split('=')[1]).ToArray();
string name = values[0];
string pattern = values[1];
string start = values[2];
string end = values[3];
(Этот код, конечно, предполагает, что пары ключ-значение всегда располагаются в одном и том же порядке.)
Вы также можете разбить строку на массив с чередованием, поэтомучто каждый другой элемент является ключом или значением:
string[] values = filter.Split(new string[] { "=", ";" }, StringSplitOptions.None);
string name = values[1];
string pattern = values[3];
string start = values[5];
string end = values[7];
Редактировать:
Чтобы обработать значения ключа в любом порядке, выполните поиск по строке и выберите из нее значения:
ILookup<string, string> values =
filter.Split(';')
.Select(s => s.Split('='))
.ToLookup(p => p[0], p => p[1]);
string name = values["name"].Single();
string pattern = values["pattern"].Single();
string start = values["start"].Single();
string end = values["end"].Single();
Вы можете использовать SingleOrDefault
, если хотите поддерживать отсутствие значений в строке:
string name = values["name"].SingleOrDefault() ?? "DefaultName";
Поиск также поддерживает дублированные пары ключ-значение.Если могут быть дубликаты, просто переберите значения:
foreach (var string name in values["name"]) {
// do something with the name
}