type
Tzj = 1 .. 10;
Tjh = set of Tzj;
var
Vjh: Tjh;
begin
Vjh := [15];
if 15 in Vjh then
showmessage('aaaa');
end;以上代码竟然Show出了'aaaa',请问这是为什么呢? 我在定义集合的时候不是已经声明了,取值范围只能是1..10吗? 为什么他可以赋上一个15的值?
如果我把 Tzj = 1 .. 10; 这行改成 Tzj = 20 .. 30; 有何区别?
集合类型
解决方案 »
- JavaScript中的 encodeURI 算法在 Delphi 中怎么实现??在线等待
- 如何用idhttp将image中的图片上传到http://192.168.0.1/1.jpg ?
- 一个很有“价值”的问题!!!!(数据库连接)
- 关于TPrintDialog``````
- 哪位手上有仪表控件
- 怎么样读取outlook express的邮箱(如收件箱)的邮件?
- 请问如何将数组转成整形
- 我想做一报表,用shape画出来的效果不好,请问有更好的方法吗?
- UDP传送的速度。
- 如何遍历webbrowser控件document文档里面的表格单元格对象?
- 深圳蓝韵网络怎么样?
- sha256 密钥是怎么加的?
Tzj = 1 .. 10;
Tjh = set of Tzj;
var
Vjh: Tjh; //定义Vjh为一个10个元素的集合,你上边定义的
begin
Vjh := [15]; //设定Vjh的集合内容为一个元素15
if 15 in Vjh then //然后就没有然后了。你试试把这里的15换成其他数字试试
showmessage('aaaa');
end;
然后试试这个
type
Tzj = 1 .. 10;
Tjh = set of Tzj;
var
Vjh: Tjh;
begin
Vjh := [6,15];
if 6 in Vjh then //你把这里的6换成不是6和15的数字
showmessage('aaaa');
end;
问题的关键是,你为什么能赋上一个15的值? 我在子界里不是明明规定了,取值范围只能是1..10吗?
你的概念乱了
-------------------------------------------------
//Vjh := [15];//这句是对集合赋值
Vjh := [];//用这句初始化试试
if 15 in Vjh then
showmessage('aaaa');
2.集合只表示元素是否存在,以元素在枚举中的位置为依据进行操作.如果超界,就放弃超界的部分.
比如type 0..15时,如果 x := [16],你是在对17位进行操作,显然超界,只取低位,低位全部是0,因此赋予后集合为空.
如果是 X := [0,16];,这就是对第0,16位设置为1,其他位置为0,由于16位超界,因此放弃高位,最后得到的只有[0],如果没有超界,那16位就会有效
3.举个例子来帮助大家理解集合type
TTestEnum = 0 .. 15;
TTestEnums = set of TTestEnum;
var
Enums : TTestEnums;procedure TForm1.FormCreate(Sender: TObject);
begin
Enums := [];
PByte(@Enums)^ := 128; //128的2进制=10000000
//由于10000000中,第8位为1,其他都是0,因此该集合只包括一个元素,那就是位于TTestEnum中的第8个位置的元素,
//因此 此时 Enums = [7];
PByte(@Enums)^ := 129; //129的2进制=10000001
//由于10000001中,第1位和第8位为1,其他都是0,因此该集合只包括2个元素,那就是位于TTestEnum中的第1个和8个位置的元素,
//因此 此时 Enums = [0,7];
//其他类推,也可以反推得到2进制数
end;1楼的理解稍有偏差.用集合来保存权限,数据库中一个BigInt字段就可以保存63个权限,取出Int64后,按照集合来判断就知道权限了,设置,保存都方便.