- - PR -
StringBuilder配列の初期化の仕方
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-12 10:29
こんにちは。
1つ教えて下さい。 StringBuilderを配列で使用したいのです。 初期化したいのですがnewが使えません。 Dim sb(0 To 10) As StringBuilder とした後、どのように初期化したらよいのでしょうか? ご教授宜しくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-12-12 10:52
newは使えます。
sbはStringBuilderを要素とする配列型です。 その配列が要素とするStringBuilderのインスタンスは別にnewする必要がありますよね。 [ メッセージ編集済み 編集者: 一郎 編集日時 2007-12-12 10:54 ] | ||||||||||||||||
|
投稿日時: 2007-12-12 11:01
配列を用いた場合は、初期化の考え方は、StringBuilder でも、他の型でも同様です。
値型でも参照型でも、初期化したい場合は、本来は全ての要素を初期化しなければなりません。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||||||||||
|
投稿日時: 2007-12-12 11:19
本来...?
この手の話題を見るといつも思うのですが、
CLR は型が主役なので個人的には Dim sb() As StringBuilder ではなくて、Dim sb As StringBuilder() として 「配列型」 であることを意識させた方が良いなぁなんて思ってしまいます。(非常に傲慢な提案ですが) もうひとつ思うのが 「デバッガ」 と 「式ウォッチ」 という強力な組み合わせを利用してデバッグしていないのではないかというところです。 提示されましたコードの System.Text.StringBuilder の配列を式ウォッチで見てみますと全要素 'Nothing' になっているハズです。 あとは System.NullReferenceException 云々がなぜ起きるのかさえ知っていれば自己解決できそうです。 (先を越されたので) ゴミでも貼っておきます。
配列ではなくて別のモノを利用することが多いと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-12-12 11:23
返答ありがとうございます。
sb = New StringBuilder(0 To 11) {} とした後 1つずつ For i As Integer = 0 To sb.Length - 1 sb(i) = New StringBuilder() Next するのですね。 | ||||||||||||||||
|
投稿日時: 2007-12-12 11:30
そうですね。 恐らく、配列で行っている初期化は何に対する初期化なのかがわかっていらっしゃらないのだと思います。 例えば、List<StringBuilder> に置き換えて考えてみると、何故そうしなければならないのかが、わかりやすいのではないでしょうか? _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||||||||||
|
投稿日時: 2007-12-12 11:35
確かにそうです。
よく解っていません。 List<StringBuilder> に置き換えて とありますが、どういうことなのでしょうか? | ||||||||||||||||
|
投稿日時: 2007-12-12 11:47
VB は自信が無いので、C# で勘弁して下さい。
例えば、上記のように List コレクションに配列を置き換えてみると、sb は List<StringBuiler> というコレクションのオブジェクトを生成しています。 その後に、各要素ごとに新しい StringBuilderオブジェクトを生成します。 配列も同様で、あくまでも配列という器を生成しているだけで、器の中に入る物は、別に生成しなければならないという考え方になります。 詳細は、System.Array クラスについて調べてみると良いでしょう。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog 満員御礼 [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2007-12-12 11:48 ] |