2010-01-28 52 views
2

我在阅读this关于如何通过C#使用AD的文章。介绍文章的一半,提供了下面的代码。关于这两行代码如何工作的问题

用户帐户属性是复选框。有没有人有任何想法下面的代码行将返回一个选中的复选框?如果选中多个复选框会怎样?我以为一个布尔被返回会更直观?

​​

为什么我们要做逻辑或以下?它是如何一个int和第二值之间的工作(这是一个字节?)

newUser.Properties["userAccountControl"].Value = val | 0x80000; 
//ADS_UF_TRUSTED_FOR_DELEGATION 

我知道这听起来很幼稚......

感谢

+0

这不是一个逻辑'或',这是一个按位。 – 2010-01-28 22:04:12

回答

1

userAccountControl属性包含一个双字节的值,其中每个单独的位具有重要含义。如果该位打开,则使用某个选项 - 如果该位未打开,则该选项不存在。

这比拥有数量庞大的布尔值更紧凑,空间更优化。此外,许多“较老”的Win16和Win32 API只是简单地以这种方式工作。

按位 “AND” 操作符用于检查这样的单个比特的存在:

如果(newUser.Properties [ “userAccountControl的”]值& 0x400的== 0x400的。)

在这种情况下,0x400位被设置。

为了实际设置了一下,您使用按位 “或” 运算符:

newUser.Properties [ “userAccountControl的”]值= VAL | 0x800

这设置“0x800”位。

这是基本的按位布尔逻辑,真的。有点混乱,但 - NET有一些帮助,使事情变得更容易一些(例如检查BitArray数据类型)

0

根据您提供的信息,我猜测他们正在使用标志类型系统来指示所选项目。每个选项都有一个特定的值,并将它们相加,以便您可以取回选定的值。

这将通过逻辑证明或用于查看是否包含特定值。