PDA

View Full Version : [C#] come usare l'operazionee di casting


giangi_luca
09-05-2010, 11:06
ciao a tutti,
sto iniziando a usare l'operazione di casting in c#.
però forse non è ho ben capito come funziona.
nell'esempio di sotto cerco di capire se posso convertire un int in string e mi dice che non è possibile cioè entra sempre nel blocco else.

mi date due dritte per capire?
grazie in anticip


static void Main()
{
int mioInt = 2;
object objGeneral = mioInt;

if (objGeneral is string)
{
string miastringa = (string)objGeneral;
}
else
{
Console.WriteLine("Non è possibile fare la conversione!");
}
}

lock cmpxchg8b %ebx
09-05-2010, 11:30
L'operatore is controlla se il tipo di un oggetto è compatibile con un dato tipo.
Il casting esplicito da int a string non è definito, quindi quell'espressione sarà sempre falsa, indipendentemente dal valore di mioInt.
Se vuoi ricavare una stringa da un intero usa:
string miastringa = mioInt.ToString();
Non c'è bisogno di alcun controllo, perché tutti gli interi sono rappresentabili come stringhe.

giangi_luca
09-05-2010, 11:35
ok grazie mille capito questo punto.
e quando è che posso usare l'operatore is nel caso di casting?
mi faresti in piccolo esempio per capire?

grazie

lock cmpxchg8b %ebx
09-05-2010, 11:39
C'è un esempio nella pagina MSDN.
http://msdn.microsoft.com/en-us/library/scekt9xw.aspx

tomminno
09-05-2010, 13:00
ok grazie mille capito questo punto.
e quando è che posso usare l'operatore is nel caso di casting?
mi faresti in piccolo esempio per capire?

grazie

is si usa nel caso di ereditarietà:

class BaseClass
{...}
class Derived1 : BaseClass
{}
class Derived2 : BaseClass
{}

void Cast(BaseClass bc)
{
if(bc is Derived1)
{...}
else if (bc is Derived2)
{...}
...
}

Anche se un codice così è sicuramente rifattorizzabile in maniera migliore.

giangi_luca
09-05-2010, 13:55
ok, ti ringrazio per l'uso dell' is.

mentre per fare il cast come faccio a capire se è un tipo di conversione
fattibile oppure no?
cioè posso sempre possibile fare un operazione di casting?

tomminno
09-05-2010, 23:12
ok, ti ringrazio per l'uso dell' is.

mentre per fare il cast come faccio a capire se è un tipo di conversione
fattibile oppure no?
cioè posso sempre possibile fare un operazione di casting?

Il cast è fattibile solo per oggetti legati da una qualche relazione di ereditarietà, altrimenti ottieni un errore in fase di compilazione.
Il cast tra oggetti in C# lo puoi fare con il tradizionale cast alla C o con "as".
Con il cast alla C ottieni una eccezione se il cast non è fattibile, con as ottieni un riferimento nullo.

In generale devi convertire (usando la classe Convert per i tipi base).

Morlack`X
10-05-2010, 12:42
Il cast è fattibile solo per oggetti legati da una qualche relazione di ereditarietà, altrimenti ottieni un errore in fase di compilazione.
Il cast tra oggetti in C# lo puoi fare con il tradizionale cast alla C o con "as".
Con il cast alla C ottieni una eccezione se il cast non è fattibile, con as ottieni un riferimento nullo.

In generale devi convertire (usando la classe Convert per i tipi base).

Aggiungo solo che l'uso di un cast con As risulta molto piu' veloce rispetto al cast "alla C". Ovviamente se il cast è one-shot (ovvero ricorre raramente), non ha senso impazzire con l'As, invece se per esempio il cast è all'interno di un ciclo allora è importante valutare se usare un prefix-cast oppure un As.