C# 使用管道和 & 符号传递多个枚举值之间的区别
C# 接受这个:
this.MyMethod(enum.Value1 | enum.Value2);
和这个:
this.MyMethod(enum.Value1 & enum.Value2);
有什么区别?
C# accepts this:
this.MyMethod(enum.Value1 | enum.Value2);
and this:
this.MyMethod(enum.Value1 & enum.Value2);
Whats the difference?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
当您执行
|
时,您选择了两者。当您执行&
时,您只会看到重叠的内容。请注意,这些运算符仅在您将
[Flags]
属性应用于枚举时才有意义。请参阅http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx 有关此属性的完整说明。作为示例,以下枚举:
以及一些测试用例:
这里我们测试
testValue
与Value1And2
重叠(即是其中的一部分):这里我们测试
是否testValue
完全等于Value1And2
。这当然不是真的:这里我们测试
testValue
和Value2
的组合是否完全等于Value1And2
:When you do
|
, you select both. When you do&
, you only what overlaps.Please note that these operators only make sense when you apply the
[Flags]
attribute to your enum. See http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx for a complete explanation on this attribute.As an example, the following enum:
And a few test cases:
Here we test that
testValue
overlaps withValue1And2
(i.e. is part of):Here we test whether
testValue
is exactly equal toValue1And2
. This is of course not true:Here we test whether the combination of
testValue
andValue2
is exactly equal toValue1And2
:这会将两个枚举值按位“或”在一起,因此如果
enum.Value
为 1 并且enum.Value2
为 2,则结果将是 3 的枚举值 (如果存在,否则它只是整数 3)。这会将两个枚举值按位“与”在一起,因此如果
enum.Value
为 1 并且enum.Value2
为 3,则结果将是 1 的枚举值。This will bitwise 'OR' the two enum values together, so if
enum.Value
is 1 andenum.Value2
is 2, the result will be the enum value for 3 (if it exists, otherwise it will just be integer 3).This will bitwise 'AND' the two enum values together, so if
enum.Value
is 1 andenum.Value2
is 3, the result will be the enum value for 1.一种是按位或,另一种是按位与。在前一种情况下,这意味着在一个或另一个中设置的所有位都在结果中设置。在后一种情况下,这意味着在两者中设置的所有共同位都在结果中设置。您可以在 Wikipedia 上阅读有关按位运算符的内容。
示例:
然后
和
One is bitwise-or, the other is bitwise-and. In the former case this means that all the bits that are set in one or the other are set in the result. In the latter case this means that all the bits that are in common and set in both are set in the result. You can read about bitwise operators on Wikipedia.
Example:
then
and
这个问题有一个很好的解释:What does the [Flags] Enum Attribute Meaning in C#?
This question has a nice explanation: What does the [Flags] Enum Attribute mean in C#?
枚举参数可以是二进制数,例如
So、|用于组合值。
使用&去除部分值,例如
Enum parameters can be binary numbers, for example
So, | is used to combine the values.
Use & to strip some part of the value, for example