[英]C# - How to use enum flags in a certain way
我想做的是這樣的:
[Flags]
public enum Actions
{
Action1 = 0x01,
Action2 = 0x02,
Action3 = 0x04
}
該對象的actions標志設置為7開始。 然后,該對象可以執行任何可用的操作。 但這里是踢球者。 該對象可以執行以下組合中的操作:
- 行動1,行動2,行動3
- 行動1,行動1,行動3
- 行動1,行動1,行動2
- 行動1,行動1,行動1
因此,動作2和3只能使用一次,而動作1可以使用,最多三次。 如果使用Action 2或Action 3,則Action 1只能使用兩次。 這是解決這個問題的最好方法嗎? 或者我應該嘗試創建一個讓我處理這個問題的新對象? 我想使用枚舉來做到這一點,但我不能,為了我的生活,弄清楚如何做到這一點或在網上找到關於這樣的事情。
提前感謝您提供的任何幫助。
枚舉只指向一個動作。 如果你有一系列動作,我可以建議一個集合來組織它們。
例:
List<Actions> _actionCombos = new List<Actions>(3);
_actionsCombos.Add(Action.Action1);
_actionsCombos.Add(Action.Action1);
_actionsCombos.Add(Action.Action1);
這將是所有1的組合。 聽起來有一個另一個變量決定了動作組合。 因此,您可以為該值構建邏輯以返回正確的操作組合(如果存在)。
我想使用枚舉來做到這一點,但我不能......
您當然可以使用枚舉類型為每個操作定義常量,但是您需要實現一些邏輯以強制執行規則。 枚舉類型不能單獨執行此操作。 您可以創建一個用於管理這些操作的類,這些操作使用枚舉值來確定類型作為第一步,但是它需要維護某個狀態以確定給定操作在給定時間是否有效。
使用枚舉標志,您無法將相同的值組合(或)兩次,因此您無法執行您正在尋找的驗證類型。 您必須創建一個類或使用集合並應用規則邏輯。 因為無論如何你必須這樣做,你不必擔心Flags屬性。 它對你沒用。 反正不是這種情況。
但是,如果您的案例僅限於您列出的四個示例,那么您可以使用包含四個值的枚舉來表示每個案例中的一個。 位標記在這里仍然沒有用,但你可以通過枚舉實現一些規則。
我這樣做是為了讓它按照我想要的方式工作。
我仍然需要經歷並重構,但它到目前為止我的需要:
public Actions Actions{get; set;}
public bool UseAction(Actions action)
{
bool mReturn = false;
if (action == Actions.Action2)
{
if ((this.Actions & Actions.Action2) == Actions.Action2)
{
mReturn = true;
this.Actions = this.Actions & ~action;
}
else if ((this.Actions & Actions.Action3) == Actions.Action3)
{
mReturn = true;
this.Actions = this.Actions & ~Actions.Action3;
}
else
{
mReturn = false;
}
}
else if (action == Actions.Action3)
{
if ((this.Actions & Actions.Action3) == Actions.Action3)
{
mReturn = true;
this.Actions = this.Actions & ~action;
}
}
else
{
if ((this.Actions & Actions.Action1) == Actions.Action1)
{
mReturn = true;
this.Actions = this.Actions & ~action;
}
else if ((this.Actions & Actions.Action3) == Actions.Action3)
{
mReturn = true;
this.Actions = this.Actions & ~Actions.Action3;
}
else if ((this.Actions & Actions.Action2) == Actions.Action2)
{
mReturn = true;
this.Actions = this.Actions & ~Actions.Action2;
}
}
return mReturn;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.