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
 

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

Preguntas similares