Преобразование диапазона целых чисел из строки в объект IEnumerable


Цель

Преобразовать следующим в интерфейс IEnumerable чисел бухгалтерского учета на х-й ряды:

"1,2,3,0,7,8,9,10-15"

для

{ 1, 2, 3, 0, 7, 8, 9, 10, 11, 12, 13, 14, 15 }

Текущая реализация

Я написал эту маленькую функцию и получил что-то работает, но я интересно, если это может стать более эффективным и богатые возможности. Мои тестовые случаи все пройдет, которые охватывают положительные и отрицательные диапазоны.

public IEnumerable<int> GetRange(string numbers) {
    string[] items = numbers.Split(',');

    foreach (var item in items) {
        if (!string.IsNullOrWhiteSpace(item)) {
            //does it contain a -? it's a range then
            int result;
            if (item.Contains("-") && !item.EndsWith("-")) {
                int start, end;
                if (int.TryParse(item.Substring(0, item.IndexOf("-")), out start) && int.TryParse(item.Substring(item.IndexOf("-") + 1), out end)) {
                    int direction = start < end ? 1 : -1;
                    for (result = start; (direction == 1 ? result < end + direction : result > end + direction); result += direction)
                        yield return result;

                    continue;
                }
            }

            if (int.TryParse(item, out result)) {
                yield return result;
                continue;
            }

        }

        throw new InvalidCastException(string.Format("Unable to cast \"{0}\" to an int", item));
    }
}


4731
10
задан 13 октября 2011 в 12:10 Источник Поделиться
Комментарии