# 表达式高级话题 # 概要 ## 简单表达式与复杂表达式 **简单表达式:**相当于一个C#赋值语句的等号后面的部分。例如: - 返回变量值加1的结果:`$= {数字变量} +1` - 判断变量值是否大于10:`$= {数字变量} > 10` **复杂表达式:**相当于一个返回特定内容的C#方法。例如:判断两个数字之中的较大值: ```csharp $= if ({number1} > {number2}) { return "较大值为number1:" + {number1}; }else{ return "较大值为number2:" + {number2}; } ``` # 辅助编写 ## 快速切换到表达式模式 在参数输入框中按F1,可在表达式模式、插值模式、普通值模式之间快速切换。 ## 表达式补全提示与验证 补全功能用于自动提示关键词、变量所支持的方法等内容。
![表达式补全与验证.gif](https://cdn.nlark.com/yuque/0/2021/gif/272392/1626305969438-468b51c2-f51d-40d8-8951-bb1c113942e1.gif#averageHue=%23fefdfd&clientId=u2e2928d9-1f68-4&from=drop&id=ud48fa5c5&originHeight=307&originWidth=905&originalType=binary&ratio=1&rotation=0&showTitle=false&size=271159&status=done&style=none&taskId=u9e2ee582-7b8a-4fe3-86ba-03a5e415546&title=)
**注意事项:** - 补全功能在服务器端实现,需要您的电脑能正常访问网络。 - 补全内容与验证提示仅供参考。 - 表达式引擎不是一个完整的C#环境,有些补全提示的方法或关键词在表达式中不支持。 - 有一些在表达式中可以使用的类型,没有对应的补全提示。 **开启补全:**
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1626308895473-2d9573cc-de37-4b1d-819d-c4befbc7bbc4.png#averageHue=%23f7f6f6&clientId=u2e2928d9-1f68-4&from=paste&height=395&id=udd2c1d71&originHeight=789&originWidth=1385&originalType=binary&ratio=1&rotation=0&showTitle=false&size=96909&status=done&style=none&taskId=u30972545-4c7a-469c-ad83-692e90848b6&title=&width=692.5) ## 表达式测试 在代码编辑窗口中编写表达式时,会自动开启“表达式测试”功能。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1626309326417-9cb5785f-6b6e-4ff4-8f41-2dac96a4bf17.png#averageHue=%23fbfafa&clientId=u2e2928d9-1f68-4&from=paste&height=408&id=u13e0194f&originHeight=815&originWidth=1255&originalType=binary&ratio=1&rotation=0&showTitle=false&size=94763&status=done&style=none&taskId=u5c1bb9f8-a503-484e-b43e-c598d07da29&title=&width=627.5)
开启时,窗口右侧会显示表达式中所使用的变量的列表和表达式的计算结果。
可以修改变量的值,观察计算结果的变化。 ## 布尔表达式助手 对于“[如果](https://getquicker.net/kc/help/doc/if)”等模块中需要判断条件的参数(布尔类型),Quicker提供了一个“布尔表达式助手”功能。
![布尔表达式助手.gif](https://cdn.nlark.com/yuque/0/2021/gif/272392/1626310606906-db4b3601-ff45-4d3b-9e0a-24e471fadbb0.gif#averageHue=%23f2f1f1&clientId=u2e2928d9-1f68-4&from=paste&height=323&id=u26ee36da&originHeight=645&originWidth=1389&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1132520&status=done&style=none&taskId=ua063c5f9-5430-44a1-acd6-4dcda22ea60&title=&width=694.5)
点击布尔参数右侧的铅笔图标即可打开。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1626311240810-81502f48-153d-4c38-8fe3-0208429b549a.png#averageHue=%23fdfdfd&clientId=u2e2928d9-1f68-4&from=paste&height=166&id=uacd0136f&originHeight=331&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=24169&status=done&style=none&taskId=u774ebf80-dc94-4034-9576-c13e8526dfa&title=&width=628.5) # 在表达式中使用内置对象 ## _context:动作上下文对象 可以用于在表达式中访问动作信息。
在需要的时候也可以进行一些hack处理,比如通过表达式更新变量的值等。
注:除非特别必要,不要在表达式中更新变量值。通过表达式更新的内容无法调试观察,在遇到问题时不好定位。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1626312273124-27a1e90c-a69b-4d44-9cf4-1aafcab0ed8f.png#averageHue=%23f5f5f5&clientId=u2e2928d9-1f68-4&from=paste&height=143&id=u2a56017a&originHeight=285&originWidth=1263&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40932&status=done&style=none&taskId=u6e39d5e2-9a1b-435f-ab0f-8a925008296&title=&width=631.5)
属性: - ActionId:当前动作ID - ActionTitle:当前动作标题 - IsRootContext:当前是否为主程序的动作上下文。(每个子程序在运行时会有自己的上下文对象) 方法: - SetVarValue:更新变量值 - GetVarValue:获取变量值 - TryGetValue:尝试获取变量值,如果不存在则返回指定的默认值 - IsVarExists:变量是否存在 - GetRootContext:获取主程序的上下文对象 - GetParentContext:获取上一级子程序(或主程序)的上下文对象,自1.37.24版本提供。 - RunSp:执行子程序 - WriteState:写入动作状态 - ReadState:读取动作状态 - WriteCache:写入对象缓存。缓存对象在动作结束的时候仍然会保留在内存,可以在下次运行动作时取出。Quicker退出后缓存失效。 - ReadCache:读取对象缓存。 - UpdateVariablesFromDict:使用指定的词典对象更新变量。词典里key对应于变量名。(1.26.0+) - UpdateVariablesFromJson:根据Json文本中的键值对更新变量。方便使用json文本格式的动作参数更新多个变量的值。(1.26.0+) 搜索框触发的动作,可以在表达式中使用 $=_context.ExtraData?.ActiveWindowBeforeSearch 获取搜索窗显示之前的活动窗口句柄。(1.39.10+) ## _eval:表达式引擎对象 可用于在必要的时候注册在表达式中使用的其它类型。请参考表达式组件的[官方文档](https://eval-expression.net/)。 注意: - 需要单独的步骤注册类型后,在后面的步骤里才可以使用这些类型。 ## _qk: 一些内置功能的封装 # 其它信息 ## 表达式中支持的类型 表达式引擎初始注册的类型: ```csharp EvalManager.DefaultContext.RegisterType( typeof(Regex), typeof(Path), typeof(System.Linq.Enumerable), typeof(JsonConvert), typeof(JArray), typeof(JObject), typeof(JToken), typeof(DateTime), typeof(CommonExtensions) ); ``` 还有一些表达式引擎内部注册的类型可以使用(部分): - System.IO.Directory - System.Globalization.CultureInfo - System.Linq.Expressions.Expression - System.IO.FileInfo - System.IO.DirectoryInfo - System.IO.File - System.Text.RegularExpressions.Match - System.Collections.ArrayList - System.Text.StringBuilder - System.Linq.Enumerable - System.Collections.IEnumerable - System.Diagnostics.Process - System.Text.Encoding - System.Dynamic.ExpandoObject - DataSet、DataTable、DataRow、SqlDataReader、DataColumn、SqlDataAdapter、DbDataReader、DataView、SqlConnection 注:可以在VisualStudio调试环境中通过EvalContext对象的AliasTypes、AliasExtensionMethods等信息了解表达式中所支持的内容。