Die*_*ego 14 .net c# parameters enums parameter-passing
C#接受这个:
this.MyMethod(enum.Value1 | enum.Value2);
Run Code Online (Sandbox Code Playgroud)
还有这个:
this.MyMethod(enum.Value1 & enum.Value2);
Run Code Online (Sandbox Code Playgroud)
有什么不同?
Pie*_*kel 19
当你这样做时|,你选择两者.当你这样做时&,你只会重叠.
请注意,这些运算符仅在将[Flags]属性应用于枚举时才有意义.有关此属性的完整说明,请参见http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx.
例如,以下枚举:
[Flags]
public enum TestEnum
{
Value1 = 1,
Value2 = 2,
Value1And2 = Value1 | Value2
}
Run Code Online (Sandbox Code Playgroud)
还有一些测试用例:
var testValue = TestEnum.Value1;
Run Code Online (Sandbox Code Playgroud)
在这里,我们测试testValue与Value1And2(即属于)的重叠:
if ((testValue & TestEnum.Value1And2) != 0)
Console.WriteLine("testValue is part of Value1And2");
Run Code Online (Sandbox Code Playgroud)
在这里我们测试是否testValue完全相等Value1And2.这当然不是真的:
if (testValue == TestEnum.Value1And2)
Console.WriteLine("testValue is equal to Value1And2"); // Will not display!
Run Code Online (Sandbox Code Playgroud)
在这里,我们测试testValue和的组合是否Value2完全等于Value1And2:
if ((testValue | TestEnum.Value2) == TestEnum.Value1And2)
Console.WriteLine("testValue | Value2 is equal to Value1And2");
Run Code Online (Sandbox Code Playgroud)
this.MyMethod(enum.Value1 | enum.Value2);
Run Code Online (Sandbox Code Playgroud)
这将两个枚举值按位"或",因此如果enum.Value为1且enum.Value2为2,则结果将为3的枚举值(如果它存在,否则它将只是整数3).
this.MyMethod(enum.Value1 & enum.Value2);
Run Code Online (Sandbox Code Playgroud)
这将两个枚举值按位"和",因此如果enum.Value为1且enum.Value2为3,则结果将为1的枚举值.
一个是按位 - 或者另一个是按位 - 和.在前一种情况下,这意味着在结果中设置在一个或另一个中设置的所有位.在后一种情况下,这意味着在结果中设置所有共同的和在两者中设置的位.您可以阅读维基百科上的按位运算符.
例:
enum.Value1 = 7 = 00000111
enum.Value2 = 13 = 00001101
Run Code Online (Sandbox Code Playgroud)
然后
enum.Value1 | enum.Value2 = 00000111
|00001101
= 00001111
= 15
Run Code Online (Sandbox Code Playgroud)
和
enum.Value1 & enum.Value2 = 00000111
&00001101
= 00000101
= 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10324 次 |
| 最近记录: |