Существует несколько способов улучшения читаемости вашего кода.
отступов
Одним из способов является отступа кода в несколько иначе, но это только помогает читаемость немного:
var result = result.OrderBy(a =>
conditionA ? valueA :
conditionB ? valueB :
conditionC ? conditionD ? valueC :
valueD :
valueE);
если еще
Вы могли также превращают эти троичные операторы в более читаемую цепочку if
, else
.
var result = Result.OrderBy(a => {
if (conditionA)
{
return valueA;
}
else if (conditionB)
{
return valueB;
}
else if (conditionC)
{
if (conditionD)
{
return valueC;
}
else
{
return valueD;
}
}
else
{
return valueE;
}
});
IComparer <>
Одним из вариантов было бы написать свою собственную реализацию IComparer<>
и передать его методу OrderBy
. Я не знаю, какой тип вашего объекта или какой тип ключей содержится в вашем коде, поэтому я собираюсь принять string
ключей.
public class MyClassComparer : IComparer<MyClass>
{
public int Compare(MyClass x, MyClass y)
{
string xKey = getKey(x);
string yKey = getKey(y);
return string.Compare(xKey, yKey);
}
private string getKey(MyClass item)
{
if (item.conditionA)
{
return item.valueA;
}
else if (item.conditionB)
{
return item.valueB;
}
else if (item.conditionC)
{
if (item.conditionD)
{
return item.valueC;
}
else
{
return item.valueD;
}
}
else
{
return item.valueE;
}
}
}
метод выдвижения
Окончательный вариант должен был бы переместить код метода расширения:
public static class MyClassExtensions
{
public static string GetSortingKey(this MyClass item)
{
if (item.conditionA)
{
return item.valueA;
}
else if (item.conditionB)
{
return item.valueB;
}
else if (item.conditionC)
{
if (item.conditionD)
{
return item.valueC;
}
else
{
return item.valueD;
}
}
else
{
return item.valueE;
}
}
}
Используя последний вариант, ваш вызов OrderBy
просто:
result.OrderBy(a => a.GetSortingKey())
Добавить правильный отступ и выровнять col ons ':' с соответствующими метками квеста '?' –
[tag: ternary-operator]: «Тернарный оператор является ** любым ** оператором, который принимает три аргумента. Для тернарного условного оператора '?' ... ':' используйте '[tag: условный-оператор]'. "(My * emphasis *) –
Еще лучше * удалить все условия *. Вы добавляете' OrderBy' и ' ThenBy' в коде, это просто функции. Если вы хотите динамически указывать поле заказа, вы можете сделать это легко в LINQ –