Unterschied zwischen gleich (LINQ) und == (C #) Operatoren?

8

Ich habe Programmierung von Microsoft LINQ in Microsoft .NET Framework 4 gelesen, und jetzt verstehe ich die join -Klausel in LINQ, aber ich habe Zweifel oder bezweifle die Definition; Im Buch ist definiert als:

  

Sie können Gleichheitsvergleiche nur mit einem speziellen Schlüsselwort equals definieren, das sich vom Operator == unterscheidet, da die Position der Operanden signifikant ist. Mit equals verwendet der linke Schlüssel die äußere Quellensequenz und der rechte Schlüssel die innere Quellensequenz. Die äußere Quellsequenz ist nur auf der linken Seite von equals und die innere Quellsequenz nur auf der rechten Seite.

Und zu diesem Operator gibt es auch eine formale Definition:

join-clause ::= join innerItem in innerSequence on outerKey equals innerKey

Bitte, kann mir jemand das obige Konzept mit anderen Worten erklären oder es paraphrasieren?

    
InfZero 10.11.2014, 14:18
quelle

1 Antwort

10

Ich schätze, das liegt daran, dass "equals" im Join nicht funktioniert wie == und daher haben die Sprachdesigner entschieden, das nicht zu tun, was es tut.

In C # ist es eine Art gegeben, dass a == b ist genau das gleiche wie b == a. In der Definition eines Joins ist dies nicht so:

%Vor%

Dies ist oben gültig.

%Vor%

Dies wird nicht kompiliert. Was die Sprachspezifikation sagt, ist, dass die "äußere" Tabelle (in diesem Fall TableA) zuerst angegeben werden muss und dass die innere Tabelle (TableB) die zweite sein muss. Ich nehme an, dass die Sprachdesigner dachten, dass dies ausreichend anders ist als die, dass == funktioniert, dass es eine schlechte Idee wäre, sie zu verwenden, und sie kamen auf die Idee, "equals" zu verwenden.

Ich denke, ich habe wahrscheinlich Recht, aber nur die beteiligten Sprachgestalter werden die Wahrheit wirklich kennen.

    
simon at rcl 10.11.2014 14:41
quelle

Tags und Links