Eso no es correcto. isno comprueba si un objeto se puede convertir a un tipo específico. Un entero se convierte en una multa larga pero 10 is longes falso.
Martin Smith
9
@MartinSmith: Estás mezclando la conversión de tipos con el casting. Un número entero se puede convertir en largo, pero no se puede convertir en largo porque no es largo.
Guffa
2
¿Me estás diciendo que un número entero no se puede convertir en largo? ¿Eso (long)some_integerfallará? Estoy bastante seguro de que ambos sabemos que eso no es cierto sin siquiera ejecutarlo, así que explique lo que quiere decir.
Martin Smith
12
@MartinSmith: Sigues confundiendo el casting con la conversión. No estás convirtiendo un entero en largo, estás convirtiendo un entero en largo. Aunque usan la misma sintaxis, las referencias se convierten y los valores se convierten.
Guffa
2
Nota sobreis : " Tenga en cuenta que el operador is solo considera conversiones de referencia, conversiones de boxeo y conversiones de unboxing. No se consideran otras conversiones, como las conversiones definidas por el usuario " . (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Acerca deas : " Tenga en cuenta que el operador as solo realiza conversiones de referencia, conversiones que aceptan valores NULL y conversiones de boxing. El operador as no puede realizar otras conversiones, como conversiones definidas por el usuario, que en su lugar deben realizarse mediante expresiones de conversión " . ( aceptan valores conversión Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
user1234567
33
La diferencia entre IS y As es que ...
IS : el operador Is se utiliza para verificar la compatibilidad de un objeto con un tipo determinado y devuelve el resultado como un booleano (verdadero o falso).
AS : como operador se utiliza para convertir un objeto en un tipo o clase determinados.
Ex.
Student s = obj asStudent;
es equivalente a:
Student s = obj isStudent?(Student)obj :(Student)null;
¡La equivalencia muestra claramente cuál de los dos es más primitivo y subyace elegantemente en su relación! ¡Gracias por la equivalencia!
Musa Al-hassy
1
@ MusaAl-hassy En realidad, esto no muestra cuál es más primitivo. isse puede expresar con asy asse puede expresar con is. Aquí se explica cómo hacer una iscon la aspalabra clave. Bool b = obj is Student; es equivalente a: Bool b = (obj as Student) != null; Más sobre esto aquí
Alex Telon
8
Tanto isy aspalabras clave se utilizan para la conversión de tipos en C #.
Cuando eche un vistazo al código IL de usos de ambas palabras clave, obtendrá la diferencia fácilmente.
Código C #:
BaseClass baseclassInstance =newDerivedClass();DerivedClass derivedclassInstance;if(baseclassInstance isDerivedClass){
derivedclassInstance =(DerivedClass)baseclassInstance;// do something on derivedclassInstance}
derivedclassInstance = baseclassInstance asDerivedClass;if(derivedclassInstance !=null){// do something on derivedclassInstance}
Código IL (para el código C # anterior está en la imagen adjunta):
El código IL para el isuso de palabras clave contiene instrucciones IL isinstay castclass.
Pero el código IL para el asuso de palabras clave solo tiene isinsta.
En el uso mencionado anteriormente, ocurrirán dos encasillamientos donde isse use la palabra clave y solo un encasillado dondeas se use la palabra clave.
Nota: Si está usando una ispalabra clave para verificar alguna condición y no tiene ningún interés en el resultado del encasillado, entonces solo habrá un encasillado, es decir
if(baseclassInstance isDerivedClass){// do something based on the condition check.}
isy las aspalabras clave se utilizarán según la necesidad.
La palabra clave is comprueba si el valor de su lado izquierdo es una instancia del tipo del lado derecho. Por ejemplo:
if(obj isstring){...}
Tenga en cuenta que, en este caso, tendrá que usar una conversión explícita adicional para obtener obj como cadena.
La palabra clave as se utiliza para convertir tipos que aceptan valores NULL. Si el valor especificado no es una instancia del tipo especificado, se devuelve un valor nulo. Por ejemplo:
El operador "como" tampoco arrojará una excepción, solo devolverá nulo.
Pinte Dani
Se corrigió el error tipográfico con respecto a 'es' y 'como'
Patrick Peters
2
Es operador, un elenco, devuelve verdadero si tiene éxito. Devuelve falso si el elenco falla. Con él, no puede capturar la variable convertida. Este operador es más útil cuando se verifican tipos en sentencias if y expresiones. Is-cast solo es ideal si la variable resultante no será necesaria para un uso posterior
Como es un yeso. Con él, ganamos rendimiento y evitamos excepciones cuando un elenco no es válido. Se devuelve nulo cuando el reparto es imposible. Para los tipos de referencia, se recomienda el modelo as-cast. Es rápido y seguro. Podemos probar la variable resultante contra nula y luego usarla. Esto elimina yesos adicionales
es OPERADOR
El operador is en C # se usa para verificar el tipo de objeto y devuelve un valor bool: verdadero si el objeto es del mismo tipo y falso si no. o también El operador "es" se utiliza para comprobar si el tipo de tiempo de ejecución de un objeto es compatible con un tipo determinado o no. Para objetos nulos, devuelve falso, por ejemplo
if(obj isAnimalObject){//Then Work}
como OPERADOR
El operador as hace el mismo trabajo que el operador is, pero la diferencia es que en lugar de bool, devuelve el objeto si son compatibles con ese tipo, de lo contrario devuelve nulo En otras palabras, el operador 'as' se usa para realizar conversiones entre compatibles tipos.
p.ej
Type obj =ObjectasType;
Ventajas de as over is
En el caso del operador is, para escribir cast, debemos seguir dos pasos:
Check the Type using isIf it’s true then Type cast
En realidad, esto afecta el rendimiento ya que todas y cada una de las veces que CLR pasará por la jerarquía de herencia, verificando cada tipo base con el tipo especificado.
Para evitar esto, use como, lo hará en un solo paso. Solo para verificar el tipo debemos usar el operador is.
Su respuesta es correcta, pero su código de muestra es un anti-patrón. isEntonces es caro as: se abre dos veces. Para los tipos de referencia, simplemente debe hacerlo as, luego verifique si existe un valor nulo para ver si funcionó.
Steven Sudit
1
Eche un vistazo al video de YouTube a continuación que explica la diferencia de una manera más demostrativa y visual:
A continuación se muestra la respuesta larga con la explicación del código.
La palabra clave "IS" es útil para comprobar si los objetos son compatibles con un tipo. Por ejemplo, en el siguiente código, estamos comprobando si el objeto "ocust" es un tipo de clase "Cliente".
object ocust =newCustomer();if(ocust isCustomer){
La palabra clave "AS" ayuda a realizar conversiones de un tipo a otro. Por ejemplo, en el siguiente código, estamos convirtiendo el objeto a un tipo de datos de cadena. Si la palabra clave "AS" no puede escribir cast, devuelve NULL.
Tanto IS como AS se utilizan para la fundición de tipo seguro
IS Keyword -> comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Nunca lanza una excepción. Este es un tipo booleano ... devuelve verdadero o falso
`student stud =new student(){}if(stud is student){}// It returns true // let say boys as derived classif(stud is boys){}// It returns false since stud is not boys type//this returns true when,
student stud =new boys()// this return true for both if conditions.`
AS Keyword: comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Devuelve un valor no nulo si el objeto dado es compatible con uno nuevo, de lo contrario es nulo. Esto genera una excepción.
`student stud =new student(){}// let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud =new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`
Ambos operadores se utilizan para la fundición de tipo seguro.
Como operador:
El operador AS también comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Esta palabra clave comprobará si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Si no es compatible con el nuevo, devolverá NULL.
Operador IS:
Este operador comprueba si el tipo de objeto es compatible con el nuevo objeto. Si es compatible, devuelve verdadero; de lo contrario, falso.
Respuestas:
es
El
is
operador comprueba si un objeto se puede convertir a un tipo específico.Ejemplo:
como
El
as
operador intenta convertir un objeto a un tipo específico y devuelve nulo si falla.Ejemplo:
También relacionado:
Fundición
El operador de conversión intenta convertir un objeto en un tipo específico y lanza una excepción si falla.
Ejemplo:
fuente
is
no comprueba si un objeto se puede convertir a un tipo específico. Un entero se convierte en una multa larga pero10 is long
es falso.(long)some_integer
fallará? Estoy bastante seguro de que ambos sabemos que eso no es cierto sin siquiera ejecutarlo, así que explique lo que quiere decir.is
: " Tenga en cuenta que el operador is solo considera conversiones de referencia, conversiones de boxeo y conversiones de unboxing. No se consideran otras conversiones, como las conversiones definidas por el usuario " . (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Acerca deas
: " Tenga en cuenta que el operador as solo realiza conversiones de referencia, conversiones que aceptan valores NULL y conversiones de boxing. El operador as no puede realizar otras conversiones, como conversiones definidas por el usuario, que en su lugar deben realizarse mediante expresiones de conversión " . ( aceptan valores conversión Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )La diferencia entre IS y As es que ...
IS : el operador Is se utiliza para verificar la compatibilidad de un objeto con un tipo determinado y devuelve el resultado como un booleano (verdadero o falso).
AS : como operador se utiliza para convertir un objeto en un tipo o clase determinados.
Ex.
es equivalente a:
fuente
is
se puede expresar conas
yas
se puede expresar conis
. Aquí se explica cómo hacer unais
con laas
palabra clave.Bool b = obj is Student;
es equivalente a:Bool b = (obj as Student) != null;
Más sobre esto aquíTanto
is
yas
palabras clave se utilizan para la conversión de tipos en C #.Cuando eche un vistazo al código IL de usos de ambas palabras clave, obtendrá la diferencia fácilmente.
Código C #:
Código IL (para el código C # anterior está en la imagen adjunta):
El código IL para el
is
uso de palabras clave contiene instrucciones ILisinsta
ycastclass
.Pero el código IL para el
as
uso de palabras clave solo tieneisinsta
.En el uso mencionado anteriormente, ocurrirán dos encasillamientos donde
is
se use la palabra clave y solo un encasillado dondeas
se use la palabra clave.Nota: Si está usando una
is
palabra clave para verificar alguna condición y no tiene ningún interés en el resultado del encasillado, entonces solo habrá un encasillado, es deciris
y lasas
palabras clave se utilizarán según la necesidad.fuente
La palabra clave is comprueba si el valor de su lado izquierdo es una instancia del tipo del lado derecho. Por ejemplo:
Tenga en cuenta que, en este caso, tendrá que usar una conversión explícita adicional para obtener obj como cadena.
La palabra clave as se utiliza para convertir tipos que aceptan valores NULL. Si el valor especificado no es una instancia del tipo especificado, se devuelve un valor nulo. Por ejemplo:
fuente
Yo diría: lea MSDN en línea, pero aquí está:
El operador is comprueba si un objeto es compatible con un tipo determinado y el resultado de la evaluación es un booleano: verdadero o falso.
El operador as nunca lanzará una excepción.
fuente
Es operador, un elenco, devuelve verdadero si tiene éxito. Devuelve falso si el elenco falla. Con él, no puede capturar la variable convertida. Este operador es más útil cuando se verifican tipos en sentencias if y expresiones. Is-cast solo es ideal si la variable resultante no será necesaria para un uso posterior
Como es un yeso. Con él, ganamos rendimiento y evitamos excepciones cuando un elenco no es válido. Se devuelve nulo cuando el reparto es imposible. Para los tipos de referencia, se recomienda el modelo as-cast. Es rápido y seguro. Podemos probar la variable resultante contra nula y luego usarla. Esto elimina yesos adicionales
fuente
fuente
es OPERADOR El operador is en C # se usa para verificar el tipo de objeto y devuelve un valor bool: verdadero si el objeto es del mismo tipo y falso si no. o también El operador "es" se utiliza para comprobar si el tipo de tiempo de ejecución de un objeto es compatible con un tipo determinado o no. Para objetos nulos, devuelve falso, por ejemplo
como OPERADOR
El operador as hace el mismo trabajo que el operador is, pero la diferencia es que en lugar de bool, devuelve el objeto si son compatibles con ese tipo, de lo contrario devuelve nulo En otras palabras, el operador 'as' se usa para realizar conversiones entre compatibles tipos.
p.ej
Ventajas de as over is En el caso del operador is, para escribir cast, debemos seguir dos pasos:
En realidad, esto afecta el rendimiento ya que todas y cada una de las veces que CLR pasará por la jerarquía de herencia, verificando cada tipo base con el tipo especificado.
Para evitar esto, use como, lo hará en un solo paso. Solo para verificar el tipo debemos usar el operador is.
fuente
El operador As es similar a una conversión, pero devuelve un valor nulo en lugar de una excepción si falla.
Y el operador Is se utiliza para comprobar si un objeto es compatible con un tipo determinado. Por lo general, se usa en declaraciones If.
fuente
is
: El operador is se usa para verificar si el tipo de tiempo de ejecución de un objeto es compatible con un tipo dadoas
: El operador as se utiliza para realizar conversiones entre tipos compatibles.fuente
is
Entonces es caroas
: se abre dos veces. Para los tipos de referencia, simplemente debe hacerloas
, luego verifique si existe un valor nulo para ver si funcionó.Eche un vistazo al video de YouTube a continuación que explica la diferencia de una manera más demostrativa y visual:
https://www.youtube.com/watch?v=IKmRtJcRX_I
A continuación se muestra la respuesta larga con la explicación del código.
La palabra clave "IS" es útil para comprobar si los objetos son compatibles con un tipo. Por ejemplo, en el siguiente código, estamos comprobando si el objeto "ocust" es un tipo de clase "Cliente".
La palabra clave "AS" ayuda a realizar conversiones de un tipo a otro. Por ejemplo, en el siguiente código, estamos convirtiendo el objeto a un tipo de datos de cadena. Si la palabra clave "AS" no puede escribir cast, devuelve NULL.
fuente
vs
El segundo devolverá nulo si obj no es MyClass, en lugar de lanzar una excepción de conversión de clase.
solo devolverá verdadero o falso
fuente
Tanto IS como AS se utilizan para la fundición de tipo seguro
IS Keyword -> comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Nunca lanza una excepción. Este es un tipo booleano ... devuelve verdadero o falso
AS Keyword: comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Devuelve un valor no nulo si el objeto dado es compatible con uno nuevo, de lo contrario es nulo. Esto genera una excepción.
fuente
Ambos operadores se utilizan para la fundición de tipo seguro.
Como operador:
El operador AS también comprueba si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Esta palabra clave comprobará si el tipo de un objeto dado es compatible con el nuevo tipo de objeto. Si no es compatible con el nuevo, devolverá NULL.
Operador IS:
Este operador comprueba si el tipo de objeto es compatible con el nuevo objeto. Si es compatible, devuelve verdadero; de lo contrario, falso.
fuente