だるろぐ

明日できることは、今日しない。

意図が明確なコード

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()
    );
}

ほかにもあると思うけど、知らん!