En una instrucción if ¿Cuándo debería usar =, == operadores? ¿Hay un operador ===? ¿Cuál es la diferencia entre estos operadores?Usar operadores iguales en C#
Respuesta
= es la asignación, como en
var i = 5;
No utilice este operador en la sentencia if.
== es para la comparación como en
if(i == 6){...}
no hay === operador en C#
Entonces, si lo uso así ......... if (i = 5) {x = 10;} ... en este caso, a la i se le asigna el valor 5? – subanki
C# es lo suficientemente inteligente como para advertirte cuando tratas de compilar ese código. debería ser si (i == 5) {x = 10;} EDITAR: Aclaraciones – tenor
Iba a decir que eso compilará. Ni siquiera estoy seguro de que aparezca una advertencia. EDITAR: Sé que VB lo compilará bien. Y no creo que alguna vez te metas dentro del bloque if. –
una sola = es para la asignación como:
String myString = "Hi There";
Un doble es igual para la comparación
if (5 == 5)
{
do something
}
iguales triples en algunos idiomas significan exactamente iguales.
C# no utiliza ese operador.
No hay === en C#. –
Un signo de igualdad sólo se utiliza para asignar una variable de un valor, el La asignación también devolverá el mismo valor para que pueda usarse en una declaración if pero nunca (casi ...) se debe usar en una instrucción if. Los signos dobles iguales se usan para probar si dos valores son iguales y es lo que usa la mayor parte del tiempo. No sé de un operador ===.
/Viktor
En caso de declaración por lo general comprobar la igualdad usando ==, el operador = es el operador assignemt, y por mi conocimiento no hay === en C# que nunca he oído hablar de él, pero existe en otros idiomas, creo que en JavaScript lo hace.
=
es un operador asignación mientras
==
es un operador comparación
Ejemplo:
int a=2;
int b=3;
int c=a=b; // a, b, c is equal to 3 as b=3
mientras
int a=2;
int b=3;
bool c= a==b // c = false since result of a==b is false
Además de las otras respuestas, ReferenceEquals(x,y)
es probablemente lo más parecido a ===
.
Para información adicional, el operador Not Equal es !=
.
Más información sobre Operadores # C: http://msdn.microsoft.com/en-us/library/6a71f45d%28v=VS.100%29.aspx
me encontré con ===
sólo en javascript todavía. Es el operador igual estricto allí. he usado varias veces ya que este if(obj === undefined){ alert("obj has sublimed");}
Bastante seguro que quiso decir: if (typeof obj === 'undefined') {alert ("obj ha sublimado");} --- su ejemplo, por definición, devuelve un error de referencia – Carnix
@Carnix Sí, tiene razón, ' (typeof obj === 'undefined') 'es la mejor manera de usarlo. Además, han pasado años desde que publiqué esa respuesta: y aprendí más hasta hoy de lo que sabía en 2011. – v1p
(Lo que sigue es algo de un "comentario" pero es demasiado largo para estar en un comentario y se perdería con los otros comentarios en este post.)
En C# ==
(como todos los operadores en C#) no es polimórfico. Es decir, la "versión" de ==
que se llama siempre se basa en el tipo estático en tiempo de compilación.
Por ejemplo:
object a = Guid.NewGuid();
object b = new Guid(""+a);
a == b // false -- uses object.== -- an *identity* compare
El Equals
método virtual, por otro lado, se define en object
y por tanto es polimórfico en todos los subtipos.
object a = Guid.NewGuid();
object b = new Guid(""+a);
a.Equals(b) // true -- uses Guid.Equals
La elección de cuál utilizar (o ==
Equals
) es a veces sutil - pero importante. La mayoría de los tipos de colecciones se utilizan para tareas como Equals
Contains
, etc (esto es prácticamente necesario para todos los contenedores genéricos ya que no hay T.==
de un tipo arbitrario T
.)
// compile-time error: Operator '==' cannot be applied to operands of type 'T' and 'T'
bool equals<T> (T a, T b) { return a == b; }
// fair-game, because object defines Equals and it's polymorphic to subtypes
bool equals<T> (T a, T b) { return a.Equals(b); }
Ver When should I use == and when should I use Equals? y Guidelines for Implementing Equals and the Equality Operator (==), etc. Personalmente , utilizo ==
sobre Equals
para tipos concretos estáticamente-resolubles para el que está bien definido ==
y yo voluntad no (por contrato o convención) se refieren a un subtipo - ejemplos son string
y tipos (la mayoría) de la estructura (por ejemplo, int
, Guid
).
Happy coding.
Editar: No hay operador C# ===
(como se ha dicho, ¡duh!). Si hablar de la variante de JavaScript, que sería aproximadamente:
bool trippleEquals (object a, object b) {
return a.GetType() == b.GetType() && a.Equals(b);
}
(Es igualdad estricta en JavaScript - pero no objeto de identidad).
Si hablar de la identidad del objeto entonces debería ser el mismo que (object)a == (object)b
que tiene la misma semántica que object.ReferenceEquals(a,b)
.
Esto es anhelar un comentario, así que decidí agregar otra publicación.
que establecer variables var a una lista de objetos esto y lleva a cabo una comparación de los dos vars que siempre fallaron lógica de comparación:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (v1 != v2)
{
// Do something
}
Gracias a los puestos aquí en este hilo, he cambiado la lógica de la siguiente manera y ahora funciona perfectamente:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (!v1.Equals(v2))
{
// Do something
}
- 1. Diferencia entre operadores "no iguales" <> y! = En PHP
- 2. operadores ternarios en C#
- 3. Construir árboles de expresiones personalizadas al usar operadores en C#
- 4. C# Operadores y legibilidad
- 5. sobrecarga de operadores en C#
- 6. ¿Definir nuevos operadores en C#?
- 7. sobrecarga de operadores en C
- 8. Operadores de conversión en C++
- 9. ¿Hay alguna forma de usar operadores implícitos C# de F #?
- 10. Operadores vs Funciones en C/C++
- 11. Agregar dos números sin usar operadores
- 12. C preprocesador # y ## operadores
- 13. punteros C++ a operadores
- 14. operadores esotéricos de C++
- 15. Operadores ternarios y retorno en C
- 16. multiplicación en C sin operadores aritméticos
- 17. ¿Cuándo dos enumeraciones son iguales en C#?
- 18. C# Operadores implícitos y ToString()
- 19. C# Operadores Explícitos y Herencia
- 20. precedencia de operadores lógicos en C
- 21. La precedencia de operadores en C#
- 22. Operadores como parámetros de método en C#
- 23. ¿Puedo crear operadores ternarios en C#?
- 24. D operadores que no están en C++
- 25. ¿se pueden usar getters en iguales y hashcode?
- 26. C extensión: <? and >? operadores
- 27. JavaScript - === vs == operadores rendimiento
- 28. ¿En qué casos debo usar memcpy sobre los operadores estándar en C++?
- 29. Ayudantes de implementación de métodos iguales (C#)
- 30. Son. y -> en C y C++ ¿realmente operadores?
¿Qué libro estás usando para aprender C#? Esto debería estar cubierto en el primer capítulo o dos. –
Lo siento, no puedo decirle el nombre del libro, sería como ofender al autor :). Es triste que algunos ejemplos no se expliquen bien en este libro :( – subanki
@subanki: si considera el libro * que * mal, ** obtenga uno diferente **. ¿Qué sentido tiene perder su tiempo tratando de aprender un idioma de un libro que incluso si usted está de acuerdo es tan malo que avergonzaría al autor? Consulte [esta pregunta] (http://stackoverflow.com/questions/477748/what-are-the-best-c-net-books), y [este otra pregunta] (http://stackoverflow.com/questions/46048/what-is-the-best-book-to-learn-c) para algunas recomendaciones. –