本文介绍了按位标志和switch语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下的code(例如),我真的不舒服有这么多的如果检查:
I have the following code (example), and I'm really not comfortable with so many 'if' checks:
public enum Flags
{
p1 = 0x01, // 0001
p2 = 0x02, // 0010
p3 = 0x04, // 0100
p4 = 0x08 // 1000
};
public static void MyMethod (Flags flag)
{
if ((flag & Flags.p1) == Flags.p1)
DoSomething();
if ((flag & Flags.p2) == Flags.p2)
DosomethingElse();
if ((flag & Flags.p3) == Flags.p3)
DosomethingElseAgain();
if ((flag & Flags.p4) == Flags.p4)
DosomethingElseAgainAndAgain();
}
MyMethod(Flags.p1 | Flags.p3);
有没有一些方法,我可以用一个'开关'语句。也许,如果我把它们转换为字符串,或使用数组?
Is there some way, that i could use an 'switch' statement. Maybe if I convert them to strings, or use arrays?
推荐答案
这样呢?
public static void MyMethod(Flags flag)
{
// Define action-lookup
var actionsByFlag = new Dictionary<Flags, Action>
{
{ Flags.p1, DoSomething},
{ Flags.p2, DosomethingElse},
{ Flags.p3, DosomethingElseAgain},
{ Flags.p4, DosomethingElseAgainAndAgain},
};
// Find applicable actions
var actions = actionsByFlag.Where(kvp => (flag & kvp.Key) == kvp.Key)
.Select(kvp => kvp.Value);
//Execute applicable actions
foreach (var action in actions)
action();
}
编辑:如果操作的顺序很重要,可能需要一个排序依据
条款
这篇关于按位标志和switch语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!