[.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:

[.whidbey] AppendDataBoundItems

Anche se è un po che ho iniziato ad usare VS 2005 (è da qlke beta ke lo konosco) non ho mai avuto occasione di parlarne. Il tempo non mi permette di fare grandi approfondimenti... e credo che ci siamo blogger molto più bravi di quanto posso essere io a spiegare le novità dell'architettura. Posterò in questa mia nuova categoria piacevoli sorprese/idee e/o tristezze relative a VS2005.

Una piacevole sorpresa ieri è stata la proprietà AppendDataBoundItems dei ListControl, http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/winfx/ref/ns/system.web.ui.webcontrols/c/listcontrol/p/appenddatabounditems.asp, che consente di appendere gli elementi tramite databind a elementi già preconfigurati nella lista, esempio il classico elemento "-- nessuna selezione --" delle dropdownlist, beh era ora! :-D

«maggio»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234