2011-11-28 90 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