2009/05/15

[C#]EachControls

昔自分が書いたC#のコードのコメントメンテナンスをする機会がきました。(コメント書いてなかったので書かないといけなくなった)

そこで面白いコードを見つけたのでメモ。残念ながらいつものようにC#1.1です。

 

private delegate bool Selection (Control ctl);
private delegate object Filter (Control ctl);

 

private static IList EachControls (Control parent, IList list, Selection s, Filter f)
{
    if (parent == null || list == null || s == null || f == null)
    {
        return list;
    }

    if (!list.Contains(parent))
    {
        if (s(parent))
        {
            list.Add(f(parent));
        }
    }

    if (parent.HasChildren)
    {
        foreach (Control c in parent.Controls)
        {
            EachControls(c, list, s, f);
        }
    }
    return list;
}

 

private static IDictionary EachControls (Control parent, IDictionary dic, Selection s, Filter f)
{
    if (parent == null || dic == null || s == null)
    {
        return dic;
    }

    if (s(parent))
    {
        dic[parent.Name] = f(parent);
    }

    if (parent.HasChildren)
    {
        foreach (Control c in parent.Controls)
        {
            EachControls (c, dic, s, f);
        }
    }
    return dic;
}

0 件のコメント:

コメントを投稿