2017-02-09 2 views
-2

Diese Frage könnte ein bisschen pingelig sein, aber ich muss das wirklich verstehen.Compiler Fehler CS0201

Ich habe folgende Code:

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

und

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

Der zweite Teil der Ausnahme,

Nur Zuordnung führt, rufen, Erhöhung, Senkung und neue Objekt Ausdrücke kann als eine Aussage verwendet werden

Als documented zumindest eine Zuordnung (=), Methodenaufruf (), new, -- oder ++ Betrieb aufgerufen werden muss.

Frage: Heißt das, == ist keine Methode?

+0

Sie können keinen Vergleich 'i == 0;' als einzelne Anweisung verwenden. Das gleiche würde passieren, wenn Sie versuchen würden, eine Variable als einzige Anweisung eines if-Blocks zu deklarieren, z. 'if (true) {int i = 0}' –

+0

== ist in der Tat keine Methode, es ist ein Operator – nbokmans

+0

'==' ist ein * Operator *. Es kann durch eine Methode für benutzerdefinierte Typen * unterstützt * werden, aber der Compiler ist frei, spezialisierten Code zu kompilieren, wenn es Typen gibt, von denen er weiß, dass sie involviert sind. –

Antwort

1

Korrekt. == ist keine Methode. Es ist ein Operator. Und ein Vergleichsoperator, der das Ergebnis des Vergleichs nicht beobachtet, macht keinen Sinn.

Sie können dies tun:

i.Equals(0); 

Da .Equals() ist ein Methodenaufruf, und wie Sie mit string.Equals() demonstriert können Sie eine Methode auf einer Linie von selbst nennen (auch wenn Sie das Ergebnis der ignorieren Methode).


Edit: auf etwas klären Sie in die Frage bearbeitet haben:

i == 0; //should return false 

Ein Operator nicht "return" ein Ergebnis, aber es bewerten zu ein Ergebnis . (Eine benutzerdefinierte Methode, die einen Operator zwar unterstützt/überlädt, aber diese Methode wird vom Framework unter der Haube zur Auswertung des Ergebnisses verwendet.) Operatoren können jedoch nur in Kontexten verwendet werden, in denen die Sprache dies zulässt. Im Falle eines Vergleichsoperators erlaubt der Compiler nicht, dass er selbst als eine Aussage existiert. (Es besteht keine Notwendigkeit, dies zuzulassen, daher müssen die Sprachen/Compiler/etc. -Teams dies nicht unterstützen.)

+0

ok Vergiss das :) – Toshi