意図が明確なコード

執筆日時:

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

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