7
votes

En C #, qu'est-ce que '| =' faire?

Je ne peux pas sembler google it - ne semble pas aimer la syntaxe dans la chaîne de recherche. Merci pour l'aide.


5 commentaires

7 réponses dans une minute;) - Quoi qu'il en soit, il convient de mentionner que x | = y n'est pas exactement identique à x = x | Y, dans cet effet secondaire, etc. Distinguez les deux dans certains cas, mais le concept est toujours là.


Fondamentalement, un duplicata de Stackoverflow. com / questions / 9021049 / opérateur-for-a-boolean-i nc / ...


@Chrisshain C'est un peu différent car c # et c ++ ont une sémantique différente pour l'expansion d'un | = iirc.


@JaredPar True, j'oublie toujours la limitation des effets secondaires diff.


Je pense aussi que vous pouvez le remplacer en C ++, mais pas en C #, si la mémoire sert.


7 Réponses :


0
votes

en C et dans d'autres langues suivantes Les conventions de syntaxe C, telles que C ++, Perl, Java et C #, (A | B) dénote un peu ou; tandis qu'une double barre verticale (A || B) désigne un (court-circuit) logique ou.


1 commentaires

Ce n'est pas un peu ou un peu ou avec une affectation à l'emplacement de stockage latéral gauche



18
votes

Ceci est une mission bit sage. C'est grossièrement sténographique pour la note suivante

Method().x |= y;
Method().x = Method().x | y;  // Not equivalent

var temp = Method();
temp.x = temp.x | y;  // Pretty close


6 commentaires

Si le côté gauche est une propriété, le getter n'est également jamais appelé une seule fois, ce qui est le même principe (étant donné qu'une propriété est essentiellement une méthode GET).


@Servy encore plus amusant à considérer: (attendre x) .Somemethod (). Y | = z; ou mon préféré personnel (attendre y] .z + = Await un ;


@JareRedPar, c'est là que je dessine la ligne et gifle le développeur qui écrit une telle ligne. Aussi drôle que c'est, il mérite d'être sur plus d'une ligne.


@Jarredpar wow, votre édition est beaucoup plus effrayante; Le premier que je pouvais au moins envelopper ma tête. +1 pour les lols. Est-ce une addition + = ou un événement abonnant + = ?


@Servy Malheureusement, en tant que développeur de compilateur, je ne peux pas arrêter le gars qui écrit ce genre de code. Vous devez vous assurer que le nouveau code fonctionne correctement


Ah, la vie facile d'un développeur LOB;)



1
votes

a | = b est sémantiquement identique à celui a = a | b


0 commentaires

4
votes

L'expression a | = b est équivalente à l'affectation a = A | B , où | est le boeuf ou l'opérateur. *

* Pas entièrement, mais assez proche à la plupart des fins.


2 commentaires

Ce n'est pas exactement équivalent parce que le compilateur C # garantit les effets secondaires de A seulement une fois dans le cas | = case


@Jarededpar: ok :) Mais si vous prenez a et b comme expressions et pas de code, alors oui, c'est vrai.



3
votes

C'est comme + = , mais avec le binaire ou xxx

vous pouvez également faire d'autres personnes comme & = , / = , * = , etc., tout autre opérateur binaire (deux arguments)


0 commentaires

3
votes

| = est un opérateur bitwise ou d'affectation. Découvrez la documentation MSDN ici ici http: // msdn. Microsoft.com/en-us/Library/H5F1Z1ZZAW(V=VS.100).aspx


1 commentaires

+1 pour le lien, -1 pour une description qui est trompeuse. | est un boeuf ou un opérateur, | = est un opérateur ou un opérateur associé à une affectation.



1
votes

Vous allez trouver la réponse ici sur msdn xxx

est la même chose que xxx


0 commentaires