ジェネリックの型パラメータに dynamic を指定する
……これ、出来るんですね。
class SampleA { public string Some() { return "SampleA.Some()"; } } class SampleB { public string Some() { return "SampleB.Some()"; } } class SampleC { public string Some() { return "SampleC.Some()"; } } class Foo { static void Hoge(Dictionary<string, dynamic> items) { foreach (var item in items) { Console.WriteLine("{0}: {1} <{2}> を呼びました。", item.Key, item.Value.Some(), item.Value.GetType()); } } static void Main() { var items = new Dictionary<string, dynamic>(); items.Add("KeyA", new SampleA()); items.Add("KeyB", new SampleB()); items.Add("KeyC", new SampleC()); Hoge(items); } }
KeyA: SampleA.Some() <SampleA> を呼びました。 KeyB: SampleB.Some() <SampleB> を呼びました。 KeyC: SampleC.Some() <SampleC> を呼びました。
一応、可変長引数的ななにかも出来そう……だけど、 dynamic である以上、型安全とは言えない。。。