有关case的问题! ( 积分: 10 )

  • 主题发起人 主题发起人 lovezyp
  • 开始时间 开始时间
L

lovezyp

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个多重选择,为什么case只能支持数字的选择??

case i of //i:integer
1:result:='';
2:result:='';
3:result:='';
end;
上面的代码可以通过,下面的就不行,为什么??

case s of //s:string
'a':result:='';
'b':result:='';
'c':result:='';
end;
 
我有一个多重选择,为什么case只能支持数字的选择??

case i of //i:integer
1:result:='';
2:result:='';
3:result:='';
end;
上面的代码可以通过,下面的就不行,为什么??

case s of //s:string
'a':result:='';
'b':result:='';
'c':result:='';
end;
 
因為case變量只能為Integer或者Char型的
 
Case只能是简单类型,或者说是序列类型,
 
非常感谢,我现在有大量的string数据需要判断,能不能让case支持string??我用char(s)也不行,我现在用的是大量的if..then..else,很麻烦!
 
暂时没有好的办法,如果首字母可以区别,那就用s[0]来处理,只是可能不能满足你的要求了(不记得是0还是1了,你自己测一下),

case s[0] of
'a':result:='';
'b':result:='';
'c':result:=''
end;

还有中比较偏门的方法,就是把字符串放到枚举里面(网上的)

// uses TypInfo; // 记得引用这个单元
// type TMyStrSel = (Beijing, Tianjing, Shanghai, Chongqing);
// 注意,上面这个定义不能放在某个函数内部哦,那样的话,它就没有运行类信息了
// var strSel: TMyStrSel;

str := 'Chongqing';
strSel := TMyStrSel(GetEnumValue(TypeInfo(TMyStrSel), str));
case strSel of
Beijing: ShowMessage('First');
Tianjing: ShowMessage('Second');
Shanghai: ShowMessage('Third');
Chongqing: ShowMessage('Forth');
else ShowMessage('Other');
end;

最后,还有个方法和枚举类似,就是用数组,

个人意见,参考一下
 
多人接受答案了。
 
后退
顶部