在C#中使用自定义逻辑存储?
我正在编写一个应用程序,在该应用程序中,我将通过以下UI向用户提供一组测试/检查:在C#中使用自定义逻辑存储?,c#,.net,C#,.net,我正在编写一个应用程序,在该应用程序中,我将通过以下UI向用户提供一组测试/检查: LayerCount ActiveLayerType EffectCount ActiveEffectType CurrentTool HasSelection HasAlpha etc 用户可以使用它们定义自定义逻辑树,例如: if (LayerCount > 1) { if (ActiveLayerType == LayerType.Blend) { // #1
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
}
}
基本上,我试图定义某种类型的值,以某种方式返回自定义逻辑中的当前级别
(比如1、2、3
,等等)。因为我需要根据用户逻辑中的当前级别
对用户的操作进行不同的解释
您基本上可以说,我正在尝试基于当前级别
散列一组值。但问题是,我不知道如何获取当前级别以将其存储为哈希键。如果我这样做了,我可以写下这样的东西:
var currentActionSet = ActionSetTable [GetCurrentLevel()]
我将得到一组用户可以根据当前级别执行的操作
尽管更可取的做法是让这些级别具有固定值,而不是基于其排序方式从1到n的值。因此,(ActiveEffectType==EffectType.GaussianBlur)
的分支将始终返回一个固定值,无论它在逻辑树中的什么位置
综上所述,问题是:
也许您可以使用位标志和/或它们一起生成哈希代码
int hash=ActiveLayerType | ActiveEffectType | CurrentTool
然后,在以后的某个时刻,您可以再次显示一个特定的标志:
if(hash&LayerType.Blend==LayerType.Blend){…}//如果LayerType.Blend之前已被或:插入哈希变量,则将为true
如果先将不同类型的枚举强制转换为int,则也可以将它们合并在一起,但请确保枚举位值不会冲突
这种方法对你的应用程序可能是实用的,也可能不是实用的,但它需要考虑的是:这里有更多的信息:
< P>也许你可以使用BITFLAGS,或者它们一起制作你的HASHCODE?p>int hash=ActiveLayerType | ActiveEffectType | CurrentTool
然后,在以后的某个时刻,您可以再次显示一个特定的标志:
if(hash&LayerType.Blend==LayerType.Blend){…}//如果LayerType.Blend之前已被或:插入哈希变量,则将为true
如果先将不同类型的枚举强制转换为int,则也可以将它们合并在一起,但请确保枚举位值不会冲突
这种方法对你的应用程序可能是实用的,也可能不是实用的,但是它需要考虑的是:更多的信息:
你可以根据你的逻辑感谢构建表达式树,你有什么链接吗?它还解决了访问当前级别的问题吗?抱歉,从来没有建立过表达式树。@Joan:只是一个关于术语的建议(当然,你可以随意称呼它):当你在“逻辑树”的同一短语中提到“级别”时,人们可能会理解为“深度”。(在您的示例中,所有的“级别”#1、#2、#3的深度都是2,因为它们都嵌套在2if
块中。)类似于“决策”或“结果”的内容可能不太容易混淆。感谢stakx,我不确定这将被称为什么,这就是我使用级别的原因。琼:你的问题现在的措辞可以很好地理解,所以没有必要马上改变一切。我会说,只要你觉得最适合你(和你的用户)就称这些“级别”。请注意,任何具有计算机科学(特别是数据结构)背景的人可能会在一开始误解您对“级别”的使用。您可以根据您的逻辑构建表达式树。谢谢,您有任何相关链接吗?它还解决了访问当前级别的问题吗?抱歉,从来没有建立过表达式树。@Joan:只是一个关于术语的建议(当然,你可以随意称呼它):当你在“逻辑树”的同一短语中提到“级别”时,人们可能会理解为“深度”。(在您的示例中,所有的“级别”#1、#2、#3的深度都是2,因为它们都嵌套在2if
块中。)类似于“决策”或“结果”的内容可能不太容易混淆。感谢stakx,我不确定这将被称为什么,这就是我使用级别的原因。琼:你的问题现在的措辞可以很好地理解,所以没有必要马上改变一切。我会说,只要你觉得最适合你(和你的用户)就称这些“级别”。只需注意,任何具有计算机科学(特别是数据结构)背景的人一开始可能会误解您对“级别”的使用。