[.whidbey] Casting con un metodo generico

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:

posted @ mercoledì 11 maggio 2005 15:01

Print

Comments on this entry:

# re: [.whidbey] Casting con un metodo generico

Left by Igor Damiani at 11/05/2005 17:32
Gravatar
interessante. unica <banale> osservazione: il nome del metodo Try sembra quasi che serva per sapere se si può o no castare. Quindi mi aspetto un true/false, non che lo faccia realmente.
Io lo cambierei nel famigerato Cast!
;-)
ciao!

# re: [.whidbey] Casting con un metodo generico

Left by M.rkino at 11/05/2005 18:12
Gravatar
Grazie Igor. Beh cmq l'idea del nome vuole seguire nomi di metodi già esistenti, double.TryParse e datetime.TryParseExact... beh si forse potrebbe andare meglio TryCast. :-D
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011