Информация об изменениях

Сообщение Re[6]: Множественное использование IEnumerable от 16.08.2020 5:09

Изменено 16.08.2020 5:33 _NN_

Re[6]: Множественное использование IEnumerable
Здравствуйте, VladCore, Вы писали:

VC>Ну вы даете. Есть параметризированные тесты. И тесты, если завтра захочется паралельно запускать в рандомном порядке, то что будете делать?

Это мне не поможет.
Мне нужно на каждый GetEnumerator вернуть другую последовательность.

VC>Maintainability в общем ниже плинтуса — через три месяца ничего не поймешь что за треш написал три месяца назад


Альтернатива это добавить перегрузку для IEnumerable<IEnumerable>.

class A
{
 IEnumerable<IEnumerable<int>> ints;
 public A(IEnumerable<IEnumerable<int>> ints) => _ints=ints;
 public A(IEnumerable<int> ints) : this(new[] { ints }) {}

 public B CreateB() => new B(getFirstSequenceAndAdvanceToNextSequence());

 IEnumerable<int> getFirstSequenceAndAdvanceToNextSequence()
 {
   var res = _ints.First();
   _ints = _ints.Skip(1);
   return res;
 }
}

class B 
{ 
 public B(IEnumerable<int> ints)
 {
  foreach (int i in ints) { Console.WriteLine(i); }
 } 
}


Вот и вопрос а нужно ли это усложнение.
Re[6]: Множественное использование IEnumerable
Здравствуйте, VladCore, Вы писали:

VC>Ну вы даете. Есть параметризированные тесты. И тесты, если завтра захочется паралельно запускать в рандомном порядке, то что будете делать?

Это мне не поможет.
Мне нужно на каждый GetEnumerator вернуть другую последовательность.

VC>Maintainability в общем ниже плинтуса — через три месяца ничего не поймешь что за треш написал три месяца назад


Альтернатива это добавить перегрузку для IEnumerable<IEnumerable>.

static class EnumerableUtils
{
 static IEnumerable<T> GetFirstSequenceAndAdvanceToNextSequence<T>(ref IEnumerable<IEnumerable<T>> source)
 {
   var res = source.First();
   source = source.Skip(1);
   return res;
 }
}

class A
{
 IEnumerable<IEnumerable<int>> ints;
 public A(IEnumerable<IEnumerable<int>> ints) => _ints=ints;
 public A(IEnumerable<int> ints) : this(new[] { ints }) {}

 public B CreateB() => new B(GetFirstSequenceAndAdvanceToNextSequence(ref _ints));
}

class B 
{ 
 public B(IEnumerable<int> ints)
 {
  foreach (int i in ints) { Console.WriteLine(i); }
 } 
}


Вот и вопрос а нужно ли это усложнение.