在C#中使用自定义逻辑进行存储?

时间:2011-01-31 18:16:05

标签: c# .net

我正在编写一个应用程序,我将通过以下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)的分支总是返回一个固定值,无论它在逻辑树中的哪个位置。

总而言之,问题是:

  1. 如何定义当前级别值,最好是固定?
  2. 如果使用此当前级别值作为关键是最佳方法,或者是否有更好的方法可以做到这一点?

1 个答案:

答案 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