为什么我可以在此代码中放置和放大?

时间:2012-06-29 07:28:29

标签: c#

我有这个示例代码:

 DirectoryEntry _entry = new DirectoryEntry(
                    connectionString,
                    this.userPrinicipalName,
                    this.password,
                    AuthenticationTypes.SecureSocketsLayer & AuthenticationTypes.Encryption);

为什么我被允许在最后一个参数中制作放大器?我习惯于以前从未见过这种巫术的java,而且我是C#的新手 - 所以有人能告诉我它是什么以及我是如何被允许的吗?

提前致谢

5 个答案:

答案 0 :(得分:2)

那些可能是整数,所以你只是在做它们值的二进制and (&)

如果您有1和2,则结果为0 01 & 10 = 00

答案 1 :(得分:1)

没有其他人指出这一点,但

AuthenticationTypes.SecureSocketsLayer & AuthenticationTypes.Encryption

有点奇怪,因为SecureSocketsLayer和Encryption都是2。

所以你不妨把一个或另一个,而不是两个......

如果 不同而你 希望将它们组合起来,你应该使用OR运算符,而不是AND运算符,&。

答案 2 :(得分:0)

AuthenticationTypes有一个FlagsAttribute。因此,您可以通过例如按位OR运算将不同的枚举值组合到复合枚举值中。

答案 3 :(得分:0)

在此页Authentication Types中。它说“这个枚举有一个FlagsAttribute属性,允许按位组合其成员值。”这意味着每个属性都有自己的位,因此这些位可以组合成多个属性。

答案 4 :(得分:0)

这很可能是一个包含[Flags]属性的枚举。此属性允许在枚举上使用按位运算符。