Я думаю, что вы хотите определить функцию сравнения, где вы можете определить ранг между любыми 2 элементами в списке.
int CompareObject1(Object1 left, Object1 right)
{
// TODO: cases where your items are null
// compare Property1 values
if (left.Property1)
{
if (right.Property1)
{
// items at same rank
return 0;
}
else
{
// left item is higher rank than right
return -1;
}
}
else if (right.Property1)
{
// right item is higher rank than left
return 1;
}
// Property1 doesn't indicate position, move along
// TODO: repeat for Property2
// Property2 doesn't indicate position, move along
// TODO: repeat for Property3
// if we get here, no determination can
// be made/don't bother to move anything
return 0;
}
возвращаемое значение указывает, должен ли левый или правый объект иметь более высокий рейтинг с -1 или 1 (или 0 для предпочтения). просто убедитесь, что вы выполняете все свои условия.
тогда вы можете использовать это как
List<Object1> foo = new List<Object1>() { <items...> };
foo.Sort(CompareObject1);
если ваш список заканчивается в обратном порядке, я, вероятно, перевернул знаки в функции сравнения. Ваши правила сортировки противоречивы, поэтому я позволю вам отсортировать Property2 и Property3.