2011-11-28 137 views
2

运营商像|=&=工作作为整数和长位运算符...按位赋值运算符在C#

int a = 123; 
int b = 234; 
a |= b; 
Console.WriteLine(a); // outputs 251 

但在一个布尔值,它是一个逻辑操作:

bool a = true; 
bool b = false; 
a |= b; 
Console.WriteLine(a); // outputs true 

怎么办^=,&=|=运算符决定在应用于不同数据类型时使用哪种操作?

+0

'但是在布尔,这是一个合乎逻辑的操作:'。嗯,是。但bools是单个位,因此按位OR与逻辑OR相同。 – Rob

回答

4

编译器根据涉及的表达式的静态类型来决定。

+1

那么泛型病例呢?像'Foo (T a,T b){a | = b; }' – PorkWaffles

+2

@PorkWaffles:你会得到一个编译错误,因为'T'不限于保证处理'|'运算符的接口/类型。 '“运算符'| ='不能应用于'T'和'T'类型的操作数'' –

+0

啊,是的,我明白了。谢谢 :) – PorkWaffles