2009-04-15 8 views
2

サービスのスレッドを実行しているときに、オブジェクトのコレクションが正しくアクセスされないという問題が発生しています。私はVS2008で私のユニットテストをうまく動かすことができますが、サービスにデバッガを付けると、私はそれが1ベースのインデックスではなく、0ベースのインデックスで開始していることがはっきり分かります。私はこれを分離するために考えることができるすべてを試したが、唯一の違いはサービス内であり、コマンドラインアプリとして実行していないことである。なぜ私のコレクションは1ではなく0で始まると決めましたか?

私は関数をデバッグするときに私は私のユニットテストでそれを実行するときに私はしない "プロパティの評価に失敗しました"というメッセージが表示されます。

お知らせください。

[EDIT]

私は常にこのことを想定してきた配列は、通常、0から始めることを知っているが、今日、私はこのバグを発見し、私はそれが0から始まっていると考えていても、デバッガがあることを示していると判断していますそれは1から始まります。私がコレクションを徹底的に調べると、VSでは正しい値が得られますが、サービスでは正しくありません。

[EDIT]

私はそれに対してキーを置くことができるので、私はMicrosoft.VisualBasic.Collectionを使用しています。ディクショナリオブジェクトも使用されている可能性がありますが、このように設定されているので、BLL Baseクラスや他の多くの関数がそれを読み取ってそれを変更することは好ましくありません。

[SOLUTION]

は私がキーにアクセスするコードを書き直す必要はありませんように(文字列、オブジェクトの)dicitonaryとGeneric.KeyValuePairを使用して私のコードをリファクタリング。 collecitonsオブジェクトと同じようにコレクションのintを処理しないので、今はうまく動作するはずです。

+0

どのような種類のコレクションを使用していますか? –

+0

Microsoft.VisualBasic.Collection – Middletone

答えて

4

デフォルトでは、.NET言語は配列インデックス0で始まりますが、明示的に1で始まるVB.NETを指定する場合を除きます。

VBアセンブリの外部でこの配列規約を実施する方法はないと考えられています.Windows RemotingやWebサービスを経由して0ベースのインデックス規約に戻った場合、

正当な理由から、0インデックスのコレクションと配列を代わりに使用するようにすべてのコードをリファクタリングすることをお勧めします。あなたのコメントに基づいて

更新

あなたはMicrosoft.VisualBasic.Collectionオブジェクトを使用していると述べました。 Microsoft.VisualBasic.Collectionオブジェクトは、開始インデックスとして1を使用します。代わりに、ArrayListオブジェクト、またはより一般的なListオブジェクトを使用してください。

+0

私はいつも私が持っていると思った。私はそれをデバッグしたとき、私は内部的には1から始めたが、サービスでは0から始まることが分かった。私は実際にはそれまで何も問題を抱えていないので、今日までこれを行っていたタイのことを実際に知りませんでした。 – Middletone

+0

オブジェクトに対してキーを保存したいのでコレクションを使用します。私は辞書を使っていたかもしれませんでしたが、今のところ、可能であれば、このためにtorreのリファクタを必要としません。 – Middletone

2

.NET Frameworkのすべてのコレクションは、配列と同様に0から始まります。常に。

あなたのコメントから、特別なVisual Basicコレクションタイプを使用しています。このタイプはVB6との相互運用性を目的としていると私は考えています。

+0

何らかの理由で.netはコレクションオブジェクトにエントリを追加し、通常1から始まります。 – Middletone

+0

洞察力のある、私はそれを知らなかった。 – Middletone