- ベストアンサー
VB.net 2010 文字定数ってありますか?
- VB.net 2010には文字定数の概念があるのか疑問です。
- C-Builderとは異なり、VBでプログラムを書くことになったのですが、文字定数の使い方が分かりません。
- 具体的には、文字定数を使ってデータの比較を行いたいのですが、VBでの実現方法が分からず困っています。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#3のコードをコンパイルしたものを、ILSpyで逆コンパイルしてみました。 Dim iTst As Integer = 65 Dim iSts As Integer If iTst = 65 Then iSts = 0 Else iSts = 1 End If Microsoft.VisualBasic.Asc("A"c)をちゃんと定数に展開してくれているみたいです。
その他の回答 (6)
- kmee
- ベストアンサー率55% (1857/3366)
「Goに行ってはGoに従え」 他の言語の手法を無理に持ってこない、というのが、プログラミングのコツだと思っています。 Cでは、純粋な「文字」という型がありません。 char は整数の一つであって、「文字」ではありません。 VBでは、純粋な文字を表現するための型があります。数値で代用する必要がありません。 A という文字には、もともと番号なんてありません。65というのは、ASCIIで決めたものです。 「iDataの数値が"A"のASCIIコードだったら」という意味を明確に表わしているのは、VBの方では。 また、最近の言語は、いろんな最適化が行われます。 下手なチューニングは逆効果、ということもあります。 VBでは、数値も「オブジェクト」です。Cの数値のような高速性を求めてはいけません。 iDataも、CharやStringする方が簡単、とかはないですか?
- Picosoft
- ベストアンサー率70% (274/391)
Keys列挙体だと'A'は判定できても'a'は判定できない気が……
- uruz
- ベストアンサー率49% (417/840)
VB.netから言語仕様が変更されて文字の定数はなくなり列挙体となりました。 Keys 列挙体でヘルプを参照してください。 if iDat = Keys.A then flag =1 else flag = 2 end if
お礼
ご回答ありがとうございました。 Keysに関してMSDNを読んでみましたが、これはキーボードのキーと1対1で設定されている定数で、私の目的とする定数とは異なるものでした。 ありがとうございました。
- Picosoft
- ベストアンサー率70% (274/391)
こんな感じかな? Dim iTst As Integer Dim iSts As Integer iTst = 65 If iTst = Microsoft.VisualBasic.Asc("A"c) Then iSts = 0 Else iSts = 1 End If
お礼
ご回答ありがとうございます。 このコーディングでコンパイラーは通りました。 ただ、これはasc関数ですよね、定数では無いと思います。 すると、やはりVBには文字定数と言う概念は無いのかも知れませんね。 * 定数 そのまま値として使用出来る。この場合、値を変換する処理時間は不要。 即ちコンパイラーが値を処理し、実行時には即値と成っているので処理時間は不要。 関数 その値を処理して値を返す。この場合は値を変換するのに実行時に処理時間がかかる。 ありがとうございました。
- Yune-Kichi
- ベストアンサー率74% (465/626)
"A"cのように書きます。 MSDNでは, 文字型 (Char) (Visual Basic) http://msdn.microsoft.com/ja-jp/library/7sx7t66b(v=vs.100).aspx の「プログラミングのヒント」に, > 型宣言文字。 1 文字のリテラル文字列に、リテラルの型文字 C を追加すると、Char データ型に変換されます。 Char には識別子の型文字はありません。 のように書かれています。 # 見つけにくいですが……。
お礼
ご回答ありがとうございます。 ただ、残念ながら私が探しているコードとは異なる物と思われます。 試しにコーディングしてみた所、エラーと成ってしまいました。 Dim iTst As Integer Dim iSts As Integer iTst = 65 If iTst = "A"c Then iSts = 0 else iSts = 1 End If でIf iTst = "A"c Then の所に"演算子'='は、型'Integer'および型'Char'に対して定義されていません。"と表示されました。 上記コーディングでAの値はデシマルの65ですからiStsが0に設定出来ればよいのですが。 ありがとうございました。
- IDii24
- ベストアンサー率24% (1597/6506)
const のことを言ってます? http://msdn.microsoft.com/ja-jp/library/cyxe49xw(v=vs.90).aspx 探しましたか。
お礼
早速のご回答ありがとうございます。 ただ、私が求めているのは Const では無い感じです。 Constは文字を定数に定義しているので、コーディング上は使えると思いますが、私のやりたいのは(VBに存在いるとして) コーディングして居る行にそのまま値を書く方法です。 多分ConstはC で言う#define AAA 5 // AAA を 5とする と同じだと思います。Const A as integer 65 とすれば良いのでしょうけど、Aが65である根拠がこの行では表現出来ず、コメントで 65は 文字のAの値であると書かないと成らないと思います。 ありがとうございました。
お礼
再度のご回答ありがとうございます。 ASC()は関数の形をして居ますが、プレコンパイル形式なんでしょうかね。 ILSpyは使った事が無いので、これで構造を確認して、使えそうならこのコーディングにしてみます。 ありがとうございました。