- PR -

StringBuilderのクリアは、可能?

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-07-20 18:48
引用:

なちゃさんの書き込み (2008-07-20 15:42) より:
引用:

unibonさんの書き込み (2008-07-20 14:15) より:
ひとつ思いつく状況としては、StringBuilder を値オブジェクトとして使わないような場合は、クリアしたいことがあります。StringBuilder のインスタンスの同一性を検査するような場合です。

バグりやすいのでまずやりたくはないですが、オブジェクトである以上、できる手立てはクラスライブラリーの側で備えていてほしい機能だと思います。


いまいち意味がわからないんですが、具体的にどんな場合になるんでしょう??


通常は値オブジェクトとして使うことが多いので、あまりやることがないし、できれば避けたほうが良いコードだとは思いますが、たとえば、つぎのようなコードです。
コード:
class Hoge
{
    private List<StringBuilder> list;

    private CreateList()
    {
        // list を構築する。
    }

    private StringBuilder Find()
    {
        // list から要素を見つける。
    }

    private bool Remove(StringBuilder sb)
    {
        // list から要素を削除する。
    }

    public void Foo()
    {
        CreateList();
        StringBuilder found = Find(); // found は list の中のひとつの要素である。
        foreach (StringBuilder sb in list) // 全要素を対称にする。
        {
            sb.Append("個"); // なんかいじって値を変える。found も対象となる。
        }
        Remove(found); // found の値が変わっているけど、
                       // found のインスタンスをキーにして検索して削除したい。
    }
}


上記では Append してますが、Append できるならクリアもできるべきでしょうという考えです。

そしてこれは余談に近くなりますが、クリアするためには、クラスのフィールドから導出して得られる値である Length プロパティーを設定(set)するという操作よりは、Clear メソッドを付けたほうが良いのではないか、という考えを私は持ちました。

スキルアップ/キャリアアップ(JOB@IT)