2012-02-16 10 views

risposta

20

Supponendo che Node è un class quindi effettuare le seguenti

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

Se invece si tratta di un struct quindi provare questo

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

mi ha battuto ad esso, +1 sulla differenza tra struct e la classe (in termini di validità del 'as') –

+0

perché non dovresti usare l'operatore "è" sui tipi di riferimento ?? 'if (o is Node) {(o as Node) .do_it(); } ' –

+0

@JohnRuiz non c'è motivo per cui tu non possa. Infatti, il secondo metodo funzionerà indipendentemente dal fatto che il nodo sia una struct o una classe – Servy

0

È possibile utilizzare la parola chiave is in C#.

if (o is Node) 
{ 

} 
+7

In realtà 'is' non viene lanciato. 'is' controlla solo il tipo. –

1

L'operatore as restituisce null se o non è un Node:

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

A meno che il nodo non sia una 'struct', non verrà compilato. –

+1

Ma a giudicare dal codice che ha pubblicato, usa i puntatori, come nei tipi di riferimento, come nelle classi. Inoltre, una struttura in C# dovrebbe essere usata molto raramente. –

+0

È vero in teoria, ma in C++ 'struct' e' class' possono avere dei puntatori. Una 'struct' potrebbe essere concepita per un nodo. –

Problemi correlati