Brad Abrams in un recente blog fa notare come l'utilizzo di As puo' evitare inutili casts.

Esempio: Supponiamo vogliate scrivere "ok" in tutte le textboxes presenti in un form.

Metodo1

foreach (Control ctrl in this.Controls)
   {
    TextBox txt = ctrl as TextBox; (*)
    if (txt !=null) txt.Text="ok";
   }

Metodo2

foreach (Control ctrl in this.Controls) //(*)
   {
    if (ctrl is TextBox) //(**)
     {
     TextBox txt=(TextBox)ctrl;
     txt.Text="ok";
     }
   }

Entrambe funzionano: Ma quale e' la differenza?
La seconda da origine a 2 casts (segnati con *) mentre la prima soluzione, grazie all'uso di As, solamente 1.

Non e' un segreto che "As" e' una delle cose che invidio a C#, fortunatamente "rumors" dicono che forse anche i programmatori VB.NET avranno la relativa controparte.