我有一些操作的集合,這些操作可以是「啓用」或「禁用」,具有指示true或false的值。在功能上,Enable:True等同於Disable:False(因其他遺留原因而存在的窩型)。關於多個項目的具體訂單
我需要將一系列操作解析爲單個相關操作,其中導致禁用的操作優先。即如果一個動作指示它應該禁用目標,並且所有其他人說它應該啓用它們,則禁用獲勝。
我想出下面的代碼:
void Main()
{
var actions = GetActions();
var x = actions.OrderBy(A => (A.ActionType == ActionType.Enable && A.Value)
|| (A.ActionType == ActionType.Disable && !A.Value)).ToList();
Console.WriteLine("Initial Order");
x.Dump();
x = x.Skip(1).ToList();
actions.RemoveAll(A => x.Contains(A));
Console.WriteLine("End Result");
actions.Dump();
}
private List<Action> GetActions()
{
var actions = new List<Action>();
actions.Add(new Action() { ActionType = ActionType.Enable, Value = true });
actions.Add(new Action() { ActionType = ActionType.Enable, Value = false });
actions.Add(new Action() { ActionType = ActionType.Disable, Value = true });
actions.Add(new Action() { ActionType = ActionType.Disable, Value = false });
return actions;
}
// Define other methods and classes here
public class Action
{
public ActionType ActionType { get; set; }
public bool Value { get; set; }
}
public enum ActionType
{
Enable,
Disable
}
這給了我正是我想要的(即表示禁用行動應該發生的單個記錄)。無論爲ActionType枚舉值(甚至是Enum文本)設置了什麼值,它都可以工作。
問題是,我不明白爲什麼,而且我擔心有些東西可能會導致它無法正常工作。基於
的順序:
var x = actions.OrderBy(A => (A.ActionType == ActionType.Enable && A.Value)
|| (A.ActionType == ActionType.ADisable && !A.Value)).ToList();
// Order Is:
// Enable False
// Disable True
// Enable True
// Disable False
我本來期望它會排序啓用:True和禁用:假在列表的頂部,但它實際上是把他們的列表的底部。那是我想,但爲什麼它是這樣做的?
默認情況下,布爾排序順序爲FALSE,然後爲真 – digEmAll