Как я могу проверить, правильно ли упорядочена последовательность значений? - PullRequest
4 голосов
/ 07 февраля 2011

У меня есть много Action объектов со свойством long Timestamp.Я хочу сделать что-то вроде этого:

Assert.IsTrue(a1.Timestamp < a2.Timestamp < a3.Timestamp < ... < an.Timestamp);

К сожалению, этот синтаксис недопустим.Есть ли встроенный способ или расширение \ LINQ \ каким-либо другим способом для этого?

Обратите внимание, что это цель для класса юнит-теста, поэтому сходите с ума.Меня не волнует производительность, удобочитаемость и т. Д.

Ответы [ 4 ]

6 голосов
/ 07 февраля 2011
private static bool isValid(params Action[] actions)
{
  for (int i = 1; i < actions.Length; i++)
    if (actions[i-1].TimeStamp >= actions[i].TimeStamp)
      return false;
  return true;
}

Assert.IsTrue(isValid(a1,a2,...,an));
4 голосов
/ 07 февраля 2011

Как насчет:

Action[] actions = { a1, a2, a3, ... an };
Assert.IsTrue
  (actions.Skip(1)
          .Zip(action, (next, prev) => prev.Timestamp < next.Timestamp)
          .All(b => b));
1 голос
/ 07 февраля 2011

, предполагая, actions является списком или массивом:

actions.Skip(1).Where((x,index)=>x.Timespan > actions[i].Timespan).All(x=>x)
1 голос
/ 07 февраля 2011
public bool InOrder(params long[] data)
{
  bool output = true;

  for (int i = 0; i <= data.Count-1;i++)
  {
    output &= data[i] < data[i + 1];
  }
  return output;
}

Я использовал цикл for, поскольку это гарантирует порядок итерации, чего не сделает цикл foreach.

...