我正在编写一个应用程序,我将通过以下UI向用户提供一组测试/检查:
LayerCount
ActiveLayerType
EffectCount
ActiveEffectType
CurrentTool
HasSelection
HasAlpha
etc
用户可以使用它们来定义自定义逻辑树,例如:
if (LayerCount > 1)
{
if (ActiveLayerType == LayerType.Blend)
{
// #1
}
else if (ActiveEffectType == EffectType.GaussianBlur)
{
// #2
}
}
else if (CurrentTool == Tools.QuickSelect)
{
if (HasSelection)
{
// #3
}
}
基本上我试图定义某种值,它会以某种方式返回其自定义逻辑中的Current Level
(让我们说1, 2, 3
,依此类推)。因为我需要根据逻辑中的Current Level
对用户的操作进行不同的解释。
你基本上可以说我试图根据Current Level
哈希一组值。但问题是,我不知道如何获得当前级别将其存储为哈希键。如果我这样做,我可以写一些类似的东西:
var currentActionSet = ActionSetTable [GetCurrentLevel()]
我会得到一组用户可以根据当前级别执行的操作。
虽然更希望这些级别具有固定值而不是从1到n的值,具体取决于它们的排序方式。所以(ActiveEffectType == EffectType.GaussianBlur)
的分支总是返回一个固定值,无论它在逻辑树中的哪个位置。
总而言之,问题是:
答案 0 :(得分:1)
也许您可以使用bitflags和OR将它们组合在一起来制作哈希码?
int hash = ActiveLayerType | ActiveEffectType | CurrentTool
然后在稍后的某个时刻,你可以再次出现一个特殊标志:
if( hash & LayerType.Blend == LayerType.Blend ) { ... } //will be true if the LayerType.Blend has previously been OR:ed into the hash variable
如果先将它们强制转换为int,也可以将不同类型的枚举OR组合在一起,确保枚举位值不会发生冲突。
这种方法对您的应用程序可能或可能不实用,但需要考虑的事项:)更多信息请点击此处:http://msdn.microsoft.com/en-us/library/cc138362.aspx