[seasar-dotnet:326] ToStringUtilクラスのToString(hoge)の挙動について

Akira Nishikata nishikata.a @ buildsystem.jp
2006年 8月 25日 (金) 15:27:49 JST


はじめまして、西方と申します。
C#もSeasarも使い始めたばかりでして、
見当違いの発言をしてしまうかもしれませんが、よろしくお願いいたします。


本題ですが、s2container.net-1.2.3-.net2.0について要望があります。

Seasar.Framework.UtilのToStringUtilクラス中のToString()メソッドですが、

    ArrayList arrayChild = new ArrayList();
    arrayChild.Add("valueChild1");
    arrayChild.Add("valueChild2");

    ArrayList array = new ArrayList();
    array.Add("value1");
    array.Add("value2");

    array.Add(arrayChild);

    String str = ToStringUtil.ToString(array);
    
    Console.WriteLine(str);

このような、コレクションの中にコレクションを含む場合では、
以下のようにクラス名がそのまま出力されてしまいます。

    {value1, value2, System.Collections.ArrayList}
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

再帰的な処理になってはいるのですが、

    ToString(IList target)
    {
        ...
        foreach (object o in target)
        {
            buf.Append(ToString(o));
            buf.Append(", ");
        }
        ...
    }

の部分で必ず ToString(object target) が呼び出されるのが原因のようです。
現状、 ToString(object target) を以下のように書き換えて対応しております。

    public static string ToString(object target)
    {
        if (target == null)
        {
            return "null";
        }

        String str = target.ToString();

        if (target is IDictionary)
        {
            str = ToString(target as IDictionary);
        }
        else if (target is IList)
        {
            str = ToString(target as IList);
        }
        else if (target is DataSet)
        {
            str = ToString(target as DataSet);
        }
        else if (target is DataTable)
        {
            str = ToString(target as DataTable);
        }
            return str;
    }

上記の場合ですと、以下のように入れ子で出力されます。

{value1, value2, {valueChild1, valueChild2}}
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
出来れば、このような出力をするように対応していただけないでしょうか。
よろしくお願いいたします。


-----------------------------------------
株式会社ビルドシステム 業務システム開発部

西方 彬 <nishikata.a @ buildsystem.jp>
-----------------------------------------




seasar-dotnet メーリングリストの案内