Grazie all'arrivo dei generics (classi e metodi), http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vb2005_generics.asp, potremo fare un sacco di cose relative alla tipizzazione senza troppo effeort di implementazione... ma questa è una storia che ormai è trita e ritrita di cui ne parlano tutti. Quello che voglio fare qui è presentare una possibile classe casting... perchè nonostante i generics ql volta il casting dovrà essere ancora usato (anke se forse un pò meno).
static class Casting
{
public static bool Try<T>(object o, out T t)
{
if (o is T)
{
t = (T)o;
return true;
}
else
{
t = default(T);
return false;
}
}
public static T Cast<T>(object o, T valueIfNotIsT)
{
if (o is T)
{
return (T)o;
}
else
{
return valueIfNotIsT;
}
}
}
Ecco un esempio di utilizzo
object o = "pippo";
string s;
ora scriveremmo ...
if(o is string)
{
s = (string)o;
Console.WriteLine("'o' is string, value is '{0}'", s);
}else{
Console.WriteLine("'o' is not a string!");
}
oppure usando l'AS (qsta versione la sto rivalutando in negativo perchè come i nullabletypes... a volte viene usata per evitare un InvalidCastExceprion e rimandare il problema dell'assegnamento/inquadramento del _problema_).
s = o as string;
if(s == null){
s = (string)o;
Console.WriteLine("'o' is string, value is '{0}'", s);
}else{
Console.WriteLine("'o' is not a string!");
}
con la classe Casting postrò scrivere...
if (Casting.Try<string>(o, out s))
{
Console.WriteLine("'o' is string, value is '{0}'", s);
}
else
{
Console.WriteLine("'o' is not a string!");
}
Per ora la scrivo nel blog, la dovrò applicare per un pò e per poter dare un mio feedback reale su vantaggi/svantaggi del suo utilizzo :-D
Qualcuno si starà forse chiedendo come mai non commento (o meglio non ho fatto esempi) per il metodo Casting.Cast.Quel metodo l'ho postato ma è ancora in alta fase di considerazioni personali.
PS: mamma mia ma qnti orrori di grammatica avevo messo alla prima stesura del post, roba da vergognarmi :-p
Technorati Tags:
Generics
Casting