あると便利なもの

コンパイル時に型チェックが通らないとダメなのが良かったり、メソッドの参照が直接とれるのが良かったり、構造体をボックス化しないためパフォーマンスも良かったり。

public static T As<T>(this T t) { return t; }

何がどう便利なのかわからない?

interface IFoo
{
  int GetValue();
}

public class A : IFoo
{
  int IFoo.GetValue() { return 1; }
}

public struct B : IFoo
{
  int IFoo.GetValue() { return 2; }
}

public class C { }

みたいな場合に、

A a = new A();
B b;
C c = new C();

a.As<IFoo>().GetValue();
b.As<IFoo>().GetValue();
c.As<IFoo>().GetValue(); // コンパイルエラー
(c as IFoo).GetValue(); // 実行時エラー

ってなかんじです。