あると便利なもの
コンパイル時に型チェックが通らないとダメなのが良かったり、メソッドの参照が直接とれるのが良かったり、構造体をボックス化しないためパフォーマンスも良かったり。
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(); // 実行時エラー
ってなかんじです。