Ваш selectableStringValuesArray
на самом деле не массив! Это означает, что каждый раз, когда вы индексируете его (с помощью ElementAt
или считаете его с помощью Count
), он должен повторно запускать регулярное выражение и проходить по списку результатов в поисках непробельных пробелов. Вам нужно что-то вроде этого:
var selectableStringValuesArray = Regex.Split(selectableValuesString, @"[\d]+").Where(x => (!String.IsNullOrWhiteSpace(x))).ToArray();
Вы также должны исправить свой correspondingNumbersString
, потому что у него та же проблема.
Я вижу, что вы используете C # 4, поэтому вы можете использовать Zip
для объединения списков, и тогда вам не нужно будет создавать массив или использовать какие-либо циклы. Вы можете создать свой словарь так:
return correspondingNumbersString.Zip(selectableStringValuesArray,
(number, str) => new KeyValuePair<int, string>(int.Parse(number), str))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);