2017-02-09 147 views
-2

這個問題可能有些挑剔,但我真的需要明白這一點。編譯器錯誤CS0201

我有以下代碼:

string.Equals("0", "1"); //returns false, does compile 

int i = 1; 
i == 0; //should return false, does not compile 

第二部分拋出異常

只有分配,調用,遞增,遞減和新的對象表達可作爲聲明使用

documented,至少一個分配(=),方法調用()new--++操作必須被調用。

問題:這是不是意味着==不是一種方法?

+0

您不能將比較'i == 0;'作爲單個語句。如果您試圖將變量聲明爲if塊的唯一語句,例如'if(true){int i = 0}' –

+0

==確​​實不是一種方法,它是一個運算符 – nbokmans

+0

'=='是*運算符*。它可以通過自定義類型的方法來支持*,但編譯器可以在知道涉及的類型時自由地編譯專用代碼。 –

回答

1

正確。 ==不是一種方法。這是一個運營商。而比較運算符本身沒有觀察比較結果,這是沒有意義的。

可以做到這一點:

i.Equals(0); 

因爲.Equals()是一個方法調用,併爲您string.Equals()證明,你可以通過調用自身線路上的方法(即使你忽略的結果方法)。


編輯:要澄清的東西你已經編輯成問題:

i == 0; //should return false 

操作員沒有「回報」的結果,但它確實評估爲結果。 (儘管支持/重載操作符的自定義方法,但該方法在框架下被用於評估結果。)但是,操作符只能用於語言允許的上下文中。在比較運算符的情況下,編譯器不允許它自己作爲語句存在。 (沒有必要允許它,所以語言/編譯器等團隊無需支持它。)

+0

好吧忘了那:) – Toshi