如何在SRL中将字符串值与枚举中的值进行比较(Blaze Advisor相关)
SRL枚举与字符串类型比较的正确实现方式
错误根因
你遇到的类型不兼容报错,是因为CompanyList是枚举类型,迭代时的it变量是枚举实例,而anApplicant.employementDetail.organisation是字符串类型,不同类型的变量直接用=判等不符合SRL的语法规范。
正确实现方案
方案1:将枚举实例转字符串比较(最简单)
直接调用枚举实例的toString()方法获取枚举的编码名称,和字符串字段判等即可,代码如下:
for each CompanyList do { if anApplicant.employementDetail.organisation = it.toString() then { print("companies: " & it) break } }
注:原代码中print("companies" it)写法错误,SRL中字符串与变量拼接需使用&符号
方案2:将字符串转枚举实例比较(更规范)
如果后续还要用到匹配到的枚举实例,推荐先把字符串转为对应枚举类型再比较,避免重复转换。转换前建议先校验字符串是否是合法的枚举值,避免运行时异常:
// 先校验字符串是否匹配枚举项名称 if CompanyList.isValidName(anApplicant.employementDetail.organisation) then { def targetCompany as CompanyList = CompanyList.valueOf(anApplicant.employementDetail.organisation) print("companies: " & targetCompany) }
这个方案不需要额外循环遍历枚举,性能更优。
方案3:枚举自定义属性匹配
如果你存储的organisation字段不是枚举的编码名称,而是枚举的中文展示名/业务值,需要先给CompanyList枚举添加对应的自定义属性(比如displayName),再遍历匹配:
for each CompanyList do { if anApplicant.employementDetail.organisation = it.displayName then { print("companies: " & it) break } }
内容的提问来源于stack exchange,提问作者phani kumar
相关产品推荐
相关产品推荐

