- PR -

StringBuilderのクリアは、可能?

投稿者投稿内容
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-07-19 20:59
StringBuilderを使用して、文字列を追加した後、クリアしたいのですが、クリアする方法が見当たりません。方法は、ありますでしょうか?
mitchin
会議室デビュー日: 2003/05/28
投稿数: 16
投稿日時: 2008-07-19 21:13
Length プロパティを 0 にすればクリアできます。
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-07-20 08:29
mitchinさん、有難うございます。

調べても解らなかったので、助かりました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-07-20 12:11
何のためにクリアしたいのでしょう。 私には必要となる場面が想定できません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-07-20 14:15
引用:

じゃんぬねっとさんの書き込み (2008-07-20 12:11) より:
何のためにクリアしたいのでしょう。 私には必要となる場面が想定できません。


ひとつ思いつく状況としては、StringBuilder を値オブジェクトとして使わないような場合は、クリアしたいことがあります。StringBuilder のインスタンスの同一性を検査するような場合です。

バグりやすいのでまずやりたくはないですが、オブジェクトである以上、できる手立てはクラスライブラリーの側で備えていてほしい機能だと思います。
ただ、私としては Clear メソッドとして備えてほしいです。Length プロパティーは派生した値なので、それに設定(set)してオブジェクトの状態を変化できるというのはなんだけ違和感があります。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2008-07-20 15:42
引用:

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

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


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

たまに見かけるのは、StringBuilderのインスタンスを使いまわすことでパフォーマンスを稼ぐという話ですね。
しかし、実際にはこれもわざわざやる意味はあんまりないと思います。
状況に依存するので一概に良くなるものでもないですし、それほど大幅に差が出るものでもありません。
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-07-20 16:20
引用:

じゃんぬねっとさんの書き込み (2008-07-20 12:11) より:
何のためにクリアしたいのでしょう。 私には必要となる場面が想定できません。



簡単に書くと以下のようなロジックを考えていました。
Appendする回数は多くなく、stringで、"+=" を使用しても
パフォーマンスは、たいして変わらないとは、思いますが、
このような使用は一般的では、ないのでしょうか?

Dim sb As System.Text.StringBuilder
Do While 〜
sb.Length = 0 'ここでクリアしたい
Do While 〜
sb.Append("A")
sb.Append("B")
sb.Append("C")

Loop
Loop
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-07-20 18:14
Clear 機能があって悪いことはないと思いますが、私も使わないと思います。
fjdsskl さんのケース、私ならこう書くと思います。

コード:
Do While 〜 
    Dim sb As New System.Text.StringBuilder 
    Do While 〜 
        sb.Append("A") 
        sb.Append("B") 
        sb.Append("C") 
        〜
    Loop
Loop



こちらの方が変数のスコープが狭くなるので良いと思います。
確かにインスタンスを作成する回数は増えますが、
パフォーマンスに多少の差はあっても、大差にはならないと思います。
(検証したわけではありませんが)

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