• 締切済み

クラスの変換について

C#のクラスの変換についてお尋ねします。 switch文を使ってstring型で受けた値を int型に変換したいのですが、 下記コードの ” Convert.ToInt32(bloodType) ” のところでエラーになります。 どうすればint型に変換できるでしょうか? どなたか宜しくお願い致します。 string bloodType = ""; switch(bloodType) { case "A型": bloodType = "1"; break; case "B型": bloodType = "2"; break; case "O型": bloodType = "3"; break; case "AB型": bloodType = "4"; break; } int bloodTypeId = Convert.ToInt32(bloodType);

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

フォームにComboBox型のメンバーbloodTypeがある、という事ですね。で、その選択により振り分けたいと。 ならば、問題はここです。 > string bloodType = ""; > switch(bloodType) string bloodTypeの宣言によってよりスコープが内側であるこちらが優先され、ComboBox bloodTypeは隠蔽されてしまいます。 そしてstring bloodTypeの中身は常に空ですから、switchのいずれのcaseも通ることはありません。 普通にComboBox bloodTypeのTextプロパティを使ってswitchすればいいですよ。 switch(bloodType.Text) (以下略) ところで、これは元々のコードがStringをString.Formatに投げているのが悪いような気がしますし、 string sql = "insert into users (bloodtypeid) values (" + bloodType.Text + ")"; 選択に応じたInt型が欲しいのならComboBox.SelectedIndexを使うべきではありませんか? string sql = string.Format( "insert into users (bloodtypeid) values ( {0} )",bloodType.SelectedIndex + 1); #SelectedIndexは0 Originなので+1

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

ひょっとしてやりたいことは case "A型": bloodTypeId = 1; break; なのでは

inuoyogi7
質問者

補足

たくさんの回答ありがとうございます。 しかしながら質問が悪かったようなので補足させて頂きます。 まずやりたいことは下記の(1)と(2)です。 (1)入力フォームのからbloodtpeを選択する。(この時comboBoxより選択するのでstring型) (2)sqlserverに入力データをbloodtypyidとして保存する。(bloodtypyidはint型) <問題点> (2)の時に下記のようなsql文ではcomboBox1とblodtypeidの型が異なるのでエラーになります。 string sql =string.Format( "insert into users (bloodtypeid) values ( {0} )",comboBox1.text); よって先にint型に変更する必要があると考えたんですが型変換がうまくいきません。 //型変更 string bloodType = ""; switch(bloodType) { case "A型": bloodType = "1"; break; case "B型": bloodType = "2"; break; case "O型": bloodType = "3"; break; case "AB型": bloodType = "4"; break; } int bloodTypeId = Convert.ToInt32(bloodType); //sql文 string sql =string.Format( "insert into users (bloodtypeid) values ( {0} )",bloodtypeid); 宜しくお願いいたします。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

string bloodTypeに値を入れてるところが見当たりませんがそれはさておき。 Convertで変換するのが目的でないのなら、各caseでbloodTypeIdに値を設定してやればよいのではありませんか?

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

string bloodType = "0"; としておくとか。

関連するQ&A

  • クラスの変換について

    お世話になります。 int [ ] x=new int [ ] { 1, 2, 3, 4, 5, 6 } ; 例えば上記のような配列をstringクラス"1","2","3","4","5","6"に変換することは可能でしょうか? 宜しくお願いします。

  • switch文のエラーについて

    次のプログラムを実行したら slect.cpp:In member function `void select::setBlood(std::string)': slect.cpp:16:error: switch quantity not an integer が出ました。switch文の何が不完全ですか?教えてください。 #include<iostream> #include<string> using namespace std; class select { private: string blood; public: void setBlood(string b); void show(); }; void select::setBlood(string b){ blood=b; switch(b){ case 'A': cout<<"A is best"<<endl; break; case 'B': cout<<"B is best"<<endl; break; case 'AB': cout<<"AB is best"<<endl; break; case 'O': cout<<"O is best"<<endl; break; default: cout<<"crazy"<<endl; break; } } void select::show(){ cout<<"Your blood type is :"<<blood<<endl; } int main(){ string b; select Q; cout<<"Please Input your Blood type in A or B or AB or O:"<<endl; cin>>b; Q.setBlood(b); Q.show(); return 0; }

  • 数値を文字列に変換する方法

    int rssi_dec = Convert::ToInt32("0X" + test02, 16); -----------(中略)----------------------- 一度、文字列だったものを数値に変換して、中略部分で計算をして、もう一度数値をHEXの 文字列に変換して、 String^ test このtestの中に代入したいと思っているのですが、どのようにすればよいのでしょうか? どうぞ、ご教授よろしくお願い致します。

  • switch文について

    独学でjavaの勉強をしているのですが、switch文が本のとおりに入力しても エラーがでて困っています。どこが間違っているのかわかりません。 ちなみにプログラム内容は class bunki2{ public static void main(String args[]){ int a; a=1; switch (a) { case1:System.out.println("変数aの値は1です。"); break; case2:System.out.println("変数aの値は2です。"); break; case3:System.out.println("変数aの値は3です。"); break; } } } です。 これでコンパイルしようとすると’case’、’default’、または’}’がありません。とでます。 なぜできないのか教えてください。

    • ベストアンサー
    • Java
  • 数値を文字列として結合した結果を数値に変換する

    お世話になっております。 プログラムで、文字を結合した結果を数値に変換する処理にて 処理を高速化できる記述方法があるか質問させてください。 ・やりたいこと  複数の数値を文字列として結合した結果を数値型に高速で変換したい。 ・現在のコード(考え方 C#にて)  今、以下のように数値変換しているのですが、  これ以外の書き方で、スマートな方法はないでしょうか?  ※結果がわかりやすいように変数はその都度宣言しています。 int i1 = "10"; int i2 = "2"; string sConcat = i1.ToString() + i2.ToString() ; // "102" // To Int int convertedInt = int.Parse( sConcat ) ; //102 // To Hex int convertedHex = Convert.ToInt32( sConcat , 16 ); // 0x102 数値を文字にして結合して・・・またキャストというのが 無駄なような気がしています。 すみませんが、良い方法があればご教授ください。

  • switch文をif文に変換

    以下のプログラムをif文に書き換えるとどうなるでしょうか? if文と論理演算子を使って短く書きかえられるらしいのですが。 #include <stdio.h> main() { int no; scanf("%d",&no); switch (no){ case 1: puts("1番です。\n"); break; case 2: puts("2番です。\n"); break; case 3: puts("3番です。\n"); break; case 4: puts("4番です。\n"); break; case 5: puts("5番です。\n"); break; case 6: puts("6番です。\n"); break; default: puts("そんな学年はありません。"); break; } }

  • 入力した文字列から母音だけを出力するプログラム

    文字列を入力し母音だけを出力するプログラムを作りました。 以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、switch文のcaseを増やすと冗長になってしまう気がします。 switch文以外の方法でもっと簡潔に書く方法はありますか?ご教授お願い致します。 /* 入力した文字列のうち、母音「a,i,u,e,o」だけ出力する */ #include <stdio.h> #include <string.h> #define MAXSTR 256 int main(void) { char str[MAXSTR]; int i; gets(str); for (i = 0; i < strlen(str); i++) switch (str[i]) { case 'a': putchar(str[i]); break; case 'i': putchar(str[i]); break; case 'u': putchar(str[i]); break; case 'e': putchar(str[i]); break; case 'o': putchar(str[i]); break; } putchar('\n'); return 0; } 実行結果: What time is it now? aieiio

  • 変数を文字型から数値型への強制変換方法?

    case文の書き方に不満が有るのでお尋ねします。 フォームの値は必ず文字型になっているので、case文では値を""で括る必要があります。 下記にサンプルを示します。 var index, val; index = document.getElementById("digitalinput").selectedIndex; val = document.form1.digitalinput.options[index].value; switch(val) { case "3": alert("選択された値は"+val+"です"); break; } valを数値型に変換して、case 3:と書けるようにする方法は有るのでしょうか。 よろしくお願いします。

  • c言語初心者です。ついに。。

    西暦月日にちを入れると何曜日かを表示できるプラグラムをつくれましたー。まだif switch do while文しかしらないけど、switch文だけでできました。でも欠点があってうるう年の1月と2月はうまくできなんです。原因わわかっていてさいごの式bに-1をしなければいけないのですがそのうるう年だけ-1という計算をどうすればできるのかが思いつきません。もし詳しい人がいたら教えてくださいーー。 #include <stdio.h> int main(void) { int y, m, l, z,v,h,q,f,x,o,j,e,a,r,b; printf("西暦何年何月か入力してください\n"); printf("西暦。:"); scanf("%d",&y); printf("何月。:"); scanf("%d",&m); printf("何日。:"); scanf("%d",&l); z=y%400; v=y%100; h=z-v; f=h/100; switch(f) { case 3 : q=0; break; case 1 : q=4; break; case 2 : q=2; break; case 0 : q=6; break; } o=y%100; j=o/4; e=o+j; a=m; switch(a) { case 1 : r=0; break; case 2 : r=3; break; case 3 : r=3; break; case 4 : r=6; break; case 5 : r=1; break; case 6 : r=4; break; case 7 : r=6; break; case 8 : r=2; break; case 9 : r=5; break; case 10 : r=0; break; case 11 : r=3; break; case 12 : r=5; break; } b=q+e+r+l; switch (b % 7){ case 0 : puts("日曜日です。"); break; case 1 : puts("月曜日です。"); break; case 2 : puts("火曜日です。"); break; case 3 : puts("水曜日です。"); break; case 4 : puts("木曜日です。"); break; case 5 : puts("金曜日です。"); break; case 6 : puts("土曜日です。"); break; } return (0); }

  • switch で疑問。java超初心者です。

    まず、 public class P1{   public static void main(String[] args){     int n = 1;       switch(n){         case 0:           System.out.println("あ");           break;         case 1:           System.out.println("い");           break;         case 2:           System.out.println("う");           break;         default:           System.out.println("え");       }   } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{   public static void main(String[] args){     int n = 1;     String s;       switch(n){         case 0:           s="あ";           break;         case 1:           s="い";           break;         case 2:           s="う";           break;         default:           s="え";       }       System.out.println(s);   } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。     System.out.print(s);                ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう