2012-02-16 25 views

Respuesta

20

Suponiendo que Node es una class luego haga lo siguiente

Node d = o as Node; 
if (d != null) { 
    d.do_it(); 
} 

Si por el contrario se trata de un struct entonces prueba este

if (o is Node) { 
    ((Node)o).do_it(); 
} 
+0

se me adelantó, 1 en la diferencia entre estructura y la clase (en términos de validez de 'as') –

+0

¿Por qué no usarías el operador "is" en los tipos de referencia? 'if (o es Node) {(o como Node) .do_it(); } ' –

+0

@JohnRuiz no hay razón para que no puedas. De hecho, el segundo método funcionará independientemente de si el nodo es una estructura o una clase – Servy

0

Usted puede utilizar la palabra clave is en C#.

if (o is Node) 
{ 

} 
+7

En realidad 'is' does not cast. 'is' solo comprueba el tipo. –

1

as El operador devuelve un valor nulo si o no es un Node:

Node d = o as Node; 
if (d != null) 
{ 
    d.do_it(); 
} 
+1

A menos que el nodo sea una 'struct', no se compilará. –

+1

Pero a juzgar por el código que publicó, usa punteros, como en los tipos de referencia, como en las clases. Además, rara vez se debería usar una estructura en C#. –

+0

Verdadero en teoría, pero en C++ 'struct' y' class' pueden tener punteros. Una 'struct' podría ser concebiblemente utilizada para un nodo. –

Cuestiones relacionadas