Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中使用自定义逻辑存储?_C#_.net - Fatal编程技术网

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

在C#中使用自定义逻辑存储?,c#,.net,C#,.net,我正在编写一个应用程序,在该应用程序中,我将通过以下UI向用户提供一组测试/检查: LayerCount ActiveLayerType EffectCount ActiveEffectType CurrentTool HasSelection HasAlpha etc 用户可以使用它们定义自定义逻辑树,例如: if (LayerCount > 1) { if (ActiveLayerType == LayerType.Blend) { // #1

我正在编写一个应用程序,在该应用程序中,我将通过以下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
    }
}
基本上,我试图定义某种类型的值,以某种方式返回自定义逻辑中的
当前级别
(比如
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,因为它们都嵌套在2
    if
    块中。)类似于“决策”或“结果”的内容可能不太容易混淆。感谢stakx,我不确定这将被称为什么,这就是我使用级别的原因。琼:你的问题现在的措辞可以很好地理解,所以没有必要马上改变一切。我会说,只要你觉得最适合你(和你的用户)就称这些“级别”。请注意,任何具有计算机科学(特别是数据结构)背景的人可能会在一开始误解您对“级别”的使用。您可以根据您的逻辑构建表达式树。谢谢,您有任何相关链接吗?它还解决了访问当前级别的问题吗?抱歉,从来没有建立过表达式树。@Joan:只是一个关于术语的建议(当然,你可以随意称呼它):当你在“逻辑树”的同一短语中提到“级别”时,人们可能会理解为“深度”。(在您的示例中,所有的“级别”#1、#2、#3的深度都是2,因为它们都嵌套在2
    if
    块中。)类似于“决策”或“结果”的内容可能不太容易混淆。感谢stakx,我不确定这将被称为什么,这就是我使用级别的原因。琼:你的问题现在的措辞可以很好地理解,所以没有必要马上改变一切。我会说,只要你觉得最适合你(和你的用户)就称这些“级别”。只需注意,任何具有计算机科学(特别是数据结构)背景的人一开始可能会误解您对“级别”的使用。