• ベストアンサー

Request.QueryStringの型について

Request.QueryString("testNo")で取得した値の型についてなのですが、私は文字列だと思っていました。 ところがここでわからなくなってしまったのが、 Request.QueryString("testNo")で取得した値を比較するときです。 たとえば ttp://xxxx/xxx.aspx?testNo=3 で受取ったRequest.QueryString("testNo")を比較するとします。 if Request.QueryString("testNo") = "3" then と if Request.QueryString("testNo") = 3 then ではどちらもTrueになるのですが、これはどうしてなのでしょう? どういった解釈がなされているのかが知りたいです。 もしくは、書いてあるページを教えていただけると幸いです。 今までは特に気にしてなかったのですが、文字列を数値で比較しても 大丈夫なのでしょうか? 自分の書いたところ見るとどっちのパターンでも書いてあって あやふやです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

HttpRequest.QueryStringはNameValueCollection型ですから,KeyもValueもStringです。 http://msdn2.microsoft.com/ja-jp/library/system.web.httprequest.querystring.aspx http://msdn2.microsoft.com/ja-jp/library/system.collections.specialized.namevaluecollection.aspx さて,今回の場合はVisual Basicですよね。 これがC#だと自動変換がないので間違いなくエラーになるのですが,VBではOption StrictがOffだと自動変換がはたらいてしまいます。さらに,デフォルト値がOffだったりします。 http://msdn2.microsoft.com/ja-jp/library/zcd4xwzs.aspx いろいろとややこしいことになるので,Option StrictはOnにしておくことをお勧めします。

lalabye7
質問者

お礼

ありがとうございました。 VBは自動変換するのがデフォルトなんですね。 スッキリしました!

その他の回答 (2)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.3

しまった。。。 読み直したら違ってたので再回答(汗 >>Dim abc as int >>abc = CInt(request.querystring("testNo")) >>もしくは >>Dim abc as String >>abc = CStr(request.querystring("testNo")) そもそも、ASP(.netだとか、別環境じゃ知りませんが、VBScriptであることを前提とする場合。。。)だと、変数宣言に型までつけるとエラーでしたっけね(汗 Dim abc までしかできない。ですね。 その後の、データ型変換は自分でもやってるので大丈夫かと思いますが。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>文字列を数値で比較しても大丈夫なのでしょうか? ん~。ここについてだけ回答です。 >>if Request.QueryString("testNo") = "3" then >>if Request.QueryString("testNo") = 3 then なので。。。 Dim abc as int abc = CInt(request.querystring("testNo")) もしくは Dim abc as String abc = CStr(request.querystring("testNo")) で、データ型を強制的に決めちゃいます。 そしてから使うと混乱しなくて済んだりします(´・ω・`) 。。。たまに、型宣言ミスって混乱する自分が言うのもなんですが(汗 http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh05/cformwsh05_01.html http://tryasp.winscom.co.jp/document/vbscript/7.htm 確証はないですけど。。。 「何型なの?」って言われたとしたら、バリアント型じゃないかな。。。?程度の記述はいろんなところに落ちてました。 まぁ、それから察するに。。。 「"3"」と「3」の違いは、バリアント型だから、どっちであってもOKってことじゃないですかね。 型宣言して、格納してみてからそれぞれやってみたら変わるかも??

参考URL:
http://www.mhl.janis.or.jp/~winarrow/vbscript/
lalabye7
質問者

お礼

開発環境書いてなくてすいませんでした。 バリアント型とか初めて意識しました。 ありがとうございます。

関連するQ&A