Bom, você utiliza o 'as' quando quer informar para o programa que ele deve ler uma variavel como sendo do tipo especificado.
Vamos supor o seguinte:
Você tem um método 'meuMetodo()' que executa uma serie de tarefas e quer retornar 2 valores, de tipos diferentes, por exemplo uma String nome e um Int32 id, como sabemos, no C# não é possível fazer isso de forma natural, mas você pode retornar um array de objects assim;
Object[] retorno = new Object[2];
retorno[0]=nome;
retorno[1]=id;
return retorno;
Porém ao fazer a chamada meuMetodo(); ele irá te retornar um object[2], como você sabe que na posição 0 sempre vai ser uma String e na posição 1 sempre vai ser um Int32 você pode fazer o seguinte:
Object[] resultadoMetodo = meuMetodo();
String resultadoNome = resultadoMetodo[0] as String;
Int32 resultadoId = resultadoMetodo[1] as Int32;
Essencialmente ele serve como um CAST, muito embora o CAST seja o mais recomendado quando se sabe quais os tipos das variaveis.
O as tem uma vantagem que é a de poder ser utilizado quando não se sabe qual o tipo certo da variável que virá. Nesse caso vamos supor que você tenha um Int32 e que você coloque ele num Object objeto e que você tenha criado uma Classe Pessoa (que modela essencialmente uma pessoa);
Int32 meuNum = 536;
Object objeto = meuNum;
Num cenário onde você faz:
1- Pessoa fulano = objeto as Pessoa;
2- Pessoa fulano = (Pessoa) objeto;
A linha 1 irá te retornar NULL em fulano e a linha 2 irá lançar uma exceção.
Espero ter esclarecido a dúvida.
Abraços!!