コードの可読性を向上させるには、いくつかの方法があります。あなたは可能性があり
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 <>
1つのオプションは、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 –
[tag:ternary-operator]: "3項演算子は、3つの引数を取る**任意の**演算子です。 "(tag:条件付き演算子)"を使用します。 –
すべての条件を削除します*。あなたは 'OrderBy'と' ThenBy'ステートメントは関数であり、順序フィールドを動的に指定したい場合は、LINQ –