这里有一个奇怪的问题,我试图将powerbuilder中的行为复制到C#。
这是powerbuilder中的选择案例陈述
CHOOSE CASE ls_char
CASE "_"
ls_char = "-"
CASE "0" to "9"
MESSAGEBOX("DIGIT")
END CHOOSE
现在问题来了: ls_char可以是字符串或char,但仍然是powerbuilder发现它的等效数值是否介于“0”和“9”之间。 我们甚至尝试过给“0”TO“900”并给出ls_char =“300”并弹出消息框。
任何有关使用某些正则表达式来实现此解决方案或任何其他解决方案的指导都将非常感激。
答案 0 :(得分:0)
在PowerScript中CHOOSE
语句不比较“...等效数值...”,它只是比较对象(在这种情况下是字符串,没有任何进一步的处理)。 “9”大于“0”,因为“999”大于“000”(你可以尝试“11”小于“2”)。
从expressionlist
中的CASE
参数的PowerScript reference manual文档,您可以看到TO
子句只接受值,转换通常从testexpression
类型转换为{{ 1}}类型,反之亦然。这意味着如果你提供字符串,那么它将比较字符串而不是数字!
C#中没有等效的expressionlist
,并且CHOOSE
语句不能像这样使用(例如,你可以在VB.NET中找到Select语句)。解决方法是改为使用switch
:
if
要比较数字,您需要做的是在string text = ls_char.ToString();
if (text == "_")
ls_char = "-";
else if (text >= "0" && text <= "9")
MessageBox.Show("Digit");
块中提供数字:
CASE
在这种情况下,ls_char(无论其类型)转换为数字,然后进行比较以检查它是否在请求的范围内。大致在C#中它等同于:
CHOOSE CASE long(ls_char)
CASE 0 TO 5
MESSAGEBOX("SMALLER")
CASE 6 TO 9
MESSAGEBOX("SMALL")
END CHOOSE