意図が明確なコード
執筆日時:
WebMatrix 2: Markdown を汎用的に拡張する仕組みを考えてみる - だるろぐ でこんなコードを書いた。
// 型名-型ディクショナリから、メソッド // (Type: p[0]).GetHtml(p[1], p[2]...) // をもつ HtmlHelper を探す var result = helper_table.FirstOrDefault(name => { if (type_table.TryGetValue(name, out helper)) { args = p.Skip(1).ToArray(); method = helper.GetMethod( "GetHtml", args.Select(_ => _.GetType()).ToArray() ); } return method != null; });// 見つからなかった場合は、既定の型・メソッドを利用する if (string.IsNullOrEmpty(result)) { helper = typeof(LinkHelper); args = p; method = helper.GetMethod( "GetHtml", args.Select(_ => _.GetType()).ToArray() ); }
お詫びして訂正いたします。
// 型名-型ディクショナリから、メソッド // (Type: p[0]).GetHtml(p[1], p[2]...) // をもつ HtmlHelper を探す var helper_exists = helper_table.Any(name => { if (type_table.TryGetValue(name, out helper)) { args = p.Skip(1).ToArray(); method = helper.GetMethod( "GetHtml", args.Select(_ => _.GetType()).ToArray() ); } return method != null; }); // 見つからなかった場合は、既定の型・メソッドを利用する if (!helper_exists) { helper = typeof(LinkHelper); args = p; method = helper.GetMethod( "GetHtml", args.Select(_ => _.GetType()).ToArray() ); }
ほかにもあると思うけど、知らん!