[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 メーリングリストの案内