3

[以下は VB6 のもので、何かがコレクション型であることを確認するためにテストしたいコレクションの配列があります]

私は何年も前に書いたいくつかのコードを見て、それがコレクションであるかどうかを確認するために次のことを行っています:

If TypeName(obj) = "Collection" Then ' Makes me feel uncomfortable.

しかし、私は文字列比較を行うという考えが好きではなく (MSDN によると、パフォーマンスが低下するだけでなく、不快に感じることもあります)、次のようなことを行うことを好みます。

If obj Is Collection Then

ただし、この行により、VB6 で「コンパイラ エラー: 変数が定義されていません」という実行時エラーが発生します。明らかに、「Is」演算子は型ではなく値を比較するため、これを実行しても実行時エラーは発生しませんが、常に False が返されます (直前に obj = New Collection を設定しても)。

Dim obj As Collection
Set obj = New Collection
If obj Is New Collection Then ' Returns False under every condition.

これは、"New Collection" が常に新しいインスタンスであり、メモリ内の新しい場所になるためです (値が同じであっても)。

もちろん、私は以下を使用することができます (そして実際に使用します) が、Nothing をテストするだけでなく、より具体的なものを求めています。

If Not obj Is Nothing Then ' We can just assume it is a Collection Type.

しかし、何かがコレクション型であるかどうかをテストするためのより良い方法を見つけようとしています。

ご協力いただきありがとうございます。

4

1 に答える 1

3

を使用しTypeOfます。例えば:

If TypeOf obj Is Collection Then

TypeOfVB6ドキュメントの「If...Then...Else」トピックで説明されています。これを指摘してくれたDeannaに感謝します!

于 2012-09-04T07:31:05.833 に答える