Incongruencia entre "is" y "as"

23/01/2006 - 18:30 por Benton | Informe spam
Hola,

Segun las MSDN, usar el operador "as" en

expression as type;

equivale a usar el operador "is" así:

expression is type ? (type)expression : (type)null;

Yo entendí esto como si para el CLR el operador "as" no existiera (por
decirlo así) y en su lugar ejecutara una evaluación usando el operador "is".

Creo que mi interpretación fue errónea, porque en dentro del método

bool IList.Contains(object value)

puedo hacer esto (estoy usando Generics):

if (value is T)

pero la siguiente línea da un error.

T Ent = value as T;

"The type parameter 'T' cannot be used with the 'as' operator because it
does not have a class type constraint nor a 'class' constraint"

¿Algun comentario?

Saludos,

-Benton

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
23/01/2006 - 19:29 | Informe spam
Benton,

Yo creo que el problema está en que el compilador (correctamente, como te
dice el mensaje) no te dejar utilizar el operador as (que sólo puede
aplicarse a tipos referencia) porque tú no has establecido ninguna
restricción sobre el tipo-paramétro T que garantice que sea un tipo
referencia.

Declara tu clase genérica como:

class MiLista<T> where T: class
{
// ...
}

Slds - Octavio

"Benton" escribió en el mensaje
news:
Hola,

Segun las MSDN, usar el operador "as" en

expression as type;

equivale a usar el operador "is" así:

expression is type ? (type)expression : (type)null;

Yo entendí esto como si para el CLR el operador "as" no existiera (por
decirlo así) y en su lugar ejecutara una evaluación usando el operador
"is".

Creo que mi interpretación fue errónea, porque en dentro del método

bool IList.Contains(object value)

puedo hacer esto (estoy usando Generics):

if (value is T)

pero la siguiente línea da un error.

T Ent = value as T;

"The type parameter 'T' cannot be used with the 'as' operator because it
does not have a class type constraint nor a 'class' constraint"

¿Algun comentario?

Saludos,

-Benton

Respuesta Responder a este mensaje
#2 José Escrich
23/01/2006 - 19:31 | Informe spam
Hola Benton,

Esto es porque el as no trabaja en los casos de unboxing, no es posible posible
hacer una conversion implicita a null. Por ejemplo algo así no te compilaria

T ds = (x is T) ? (T) x : (T) null;

en todo caso lo que puedes utilizar es: t = default(T);

saludos,

José Escrich
jescrich (a) gmail.com
http://latincoder.com

B> Hola,
B>
B> Segun las MSDN, usar el operador "as" en
B>
B> expression as type;
B>
B> equivale a usar el operador "is" así:
B>
B> expression is type ? (type)expression : (type)null;
B>
B> Yo entendí esto como si para el CLR el operador "as" no existiera
B> (por decirlo así) y en su lugar ejecutara una evaluación usando el
B> operador "is".
B>
B> Creo que mi interpretación fue errónea, porque en dentro del método
B>
B> bool IList.Contains(object value)
B>
B> puedo hacer esto (estoy usando Generics):
B>
B> if (value is T)
B>
B> pero la siguiente línea da un error.
B>
B> T Ent = value as T;
B>
B> "The type parameter 'T' cannot be used with the 'as' operator because
B> it does not have a class type constraint nor a 'class' constraint"
B>
B> ¿Algun comentario?
B>
B> Saludos,
B>
B> -Benton
B>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida