Универсальный Linq, заказывающий функцию?

Поместите метод в group и используйте dependsOnGroups.

class c1 {
  @Test(groups={"c1.verifyConfig"})
  public void verifyConfig() {
    //verify some test config parameters
  }
}

class c2 {
  @Test(dependsOnGroups={"c1.verifyConfig"})
  public void dotest() {
    //Actual test
  }
}

Рекомендуется проверить конфигурацию в @Before * и выбросить, если что-то пойдет не так, чтобы тесты не запускались. Таким образом, тесты могут фокусироваться только на тестировании.

class c2 {
  @BeforeClass
  public static void verifyConfig() {
    //verify some test config parameters
    //Usually just throw exceptions
    //Assert statements will work
  }

  @Test
  public void dotest() {
    //Actual test
  }
}
5
задан JaredPar 8 June 2009 в 18:55
поделиться

2 ответа

OrderBy ожидает функцию выбора ключа типа Func и необязательный IComparer для определения само сравнение.

Вам понадобятся следующие определения помощников:

 class FunctorComparer<T> : IComparer<T> {
        private readonly Comparison<T> m_Comparison;

        public FunctorComparer(Comparison<T> Comparison) {
            this.m_Comparison = Comparison;
        }

        public int Compare(T x, T y) {
            return m_Comparison(x, y);
        }
    }

    static Comparison<TKey> Compare<TKey, TRes>(Func<TKey, TRes> Selector) where TRes : IComparable<TRes> {
        return (x, y) => Selector(x).CompareTo(Selector(y));
    }

Теперь вы можете написать

Comparison<POLine> x;

if (option) 
   x = Compare<POLine, int>(l => l.PartNumber);
else
   x = Compare<POLine, string>(l => l.LineOrder);

var res = poLines.OrderBy(i => i, new FunctorComparer<POLine>(x));
5
ответ дан 14 December 2019 в 04:46
поделиться

Вы можете рассмотреть возможность использования Dynamic LINQ из образцов VS2008 . Затем вы можете сделать:

var orderedLines = poLines.OrderBy( poLineOrder ? "PartNumber" : "LineOrder" );
3
ответ дан 14 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: