• 締切済み

Null判定がきかない

VB2008で,ある特定のウェブページのレイアウトを変更させて表示させる プログラムを作りました。自分のPCでは快調に動くので,別のPCで動かして みたところ,NullReferenceExceptionが発生して止まってしまいます。 しらべてみたところ,ビルドしたPCでは, Dim elemchild as HtmlElement elemchild=xxxx.firstchild Do ~処理~ elemchild=elemchild.NextSibling Loop Until isNothing(elemchild) で,elemchildがNothingになるとちゃんとループを抜けているのですが, もう1台のPCでは,elemchildがNothingになってもループを抜けず, ~処理~のところで,NullReferenceExceptionが発生しているみたいです。 Null判定のところを,whileにしてみたり,elemchild is Nothingと書いて みたり,いろいろ書き換えてみましたが,まったくNothingを拾ってくれず ループを繰り返します。 ~処理~の所全体を,try~catchで囲って,catchでループから抜けさせると NullReferenceExceptionは起きなくなります。 なぜ,ビルドしたPCではうまくNothingの判定ができ,別なPCでは Nothingの判定ができないのでしょうか?まったく分かりません。どなたか お教えください。

みんなの回答

回答No.1

Dim elemchild as HtmlElement elemchild=xxxx.firstchild ←ここ Do ~処理~ elemchild=elemchild.NextSibling Loop Until isNothing(elemchild) 上記の指定箇所ですでにNothingになっている可能性はありませんか? 現在のコードだとDo~Loopの一週目はNothing判定がされません。

fukugoo07
質問者

補足

ありがとうございます。しかし,ご指摘の部分がNothingでないことは確認しています。ビルドしたPCではそもそも例外が発生しません。 挙動的にループの終わり間際に例外が発生しているのは分かりましたので,最初は,elemchild=elemchild.NextSiblingがNothingになっているために例外が発生しているのかと思い,この代入文をNull判定してから行うようにしても例外が止まらず,ならば,Loop文の条件判断でNothingのオブジェクトを参照しているからか?と考え,ループの前にif文でNothing判定を行い,Nothingの場合はフラグを立て,Loop文ではそのフラグで条件判断を行うようにしてみました。 それでも例外が発生するので,そのフラグの値をMessageBoxで表示させてみてみると,Nothingで”1”になるべきところが,”0”のまんまだということが分かり,どうやらNull判定ができていないという結論に至りました。 もちろんビルドしたPCでは,ちゃんと”1”になり,ループを抜けます。ビルドしたPCでも,もう1台のPCでも同じデータを使っています。 なぜ,同じデータで,1台のPCではIsNothing()がtrueになり,もう1台のPCでIsNothing()がFalseになるのか,理解できません!

関連するQ&A