雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

ジェネリックの型パラメータに 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 である以上、型安全とは言えない。。。