C#型変換について教えてください

このQ&Aのポイント
  • C#でstring型からint型のリストに変換する方法について教えてください。
  • キーボードからの値入力でint型のリストに直接入力する方法について教えてください。
  • 質問者はC#の型変換について知識が少ないため、詳しい方法を教えてほしいと希望しています。
回答を見る
  • ベストアンサー

[C#]型変換について教えてください。

◆int型のリスト「 List<int>」に変換したいです。 以下、ソースの一部を記述します。 ***********ソースの一部*********** string str; Console.Write("4桁の数値->"); str = Console.ReadLine(); *************************************** ■現状 ・string型の変数"str"に、キーボードからの値入力を許容。 ■質問 2つあります。よろしくお願いいたします。 1. 要素の型「string」からint型のリスト「 List<int>」に変換する方法はありませんか? 2. キーボードからの値入力でint型のリスト「 List<int>」に直接入力することはできませんか? 拙い知識のため要領を得ない質問かもしれませんが、ぜひご教示ください。

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

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

1について 直接stringからList<int>にすることは出来ませんが、stringをint.TryParse()メソッドを使ってint型に変換し、それをList<int>に追加すればよいかと思います。 2について キーボードからの入力を直接int型にしようとするのはあまりオススメしません。 なぜなら、キーボードからの入力は数値とは限らないので、「あ」とか入力されるとエラーが発生するかもしれません。 TryParse()メソッドを使えば可能かもしれませんが。

yaruo33
質問者

お礼

早速のご回答ありがとうございます。 1の手順で試してみます。

関連するQ&A

  • C#の数値の変換について

    ユーザーが数値以外を入力したらエラーを返すコードを作成したのですが while (!int.TryParse(Console.ReadLine(), out enterNum)) こちらの行を TryParse だけでなく、それ以外の分解した書き方でも作成するように指示を受けたのですが、書き方が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 int enterNum; Console.WriteLine("勝負回数を入力してください"); //入力された文字が数値に変換出来なかった場合、inputerrorを表示させループさせる while (!int.TryParse(Console.ReadLine(), out enterNum)) { Console.WriteLine("inputerror"); }

  • 文字列や文字から整数への変換方法について

    文字列(string型)や文字(char型)から整数(int型など)に変換 する時のルールがよく解りません。 たとえば、キーボードから数字を打って、その入力された数字を 数値として整数型の変数に代入したい場合のやり方です。 ちょっとプログラムを作ってみました。 using System; class clmain { private static void Main() { Console.Write("1桁の整数を入れてね "); char ch = char.Parse(Console.ReadLine()); int by1 = (int)ch; int by2 = (int)char.GetNumericValue(ch); Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch); Console.Write("整数を入れてね "); string st = Console.ReadLine(); /* by = (int)st; コンパイルエラー */ int by3 = int.Parse(st); Console.WriteLine("by3 = {0}, st = {1}", by3, st); } } まず、char型からint型への変換では、  int型変数=(int)char型変数; はコンパイルは通りますけど、実行すると全く違った値が入って しまいます。たとえば char型変数の値が "1" だと、int型変数には 49 が入ります。 int型変数 = (int)char.GetNumericValue(char型変数); と書いてようやく、思い通りの動きをしてくれます。 また、string型からint型への変換では  int型変数=(int)string型変数; はコンパイルエラーになります。 int型変数 = int.Parse(string型変数); とするとコンパイル出来て正しく動きます。 これで質問ですけど、 (1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか? (2)int型変数=(int)char型変数; とすると、上に書いたように、全く 違った(希望しない)値が代入されてしまいます。これは、どういう 動きをしているのでしょうか? また、これはコンパイルエラーに なりませんけど、どういう時にこの書き方をするのでしょうか? 解る方、お願いします。

  • [C#]順序通りに実行されない

    次のC#のプログラムについて質問です。 //ここから using System; class Myclass { double[] point; string[] name; int nMax; public double this[string str] { get { for (int i = 0; i < nMax; i++) { if (str == name[i]) return point[i]; } return -1.0; } set { for (int i = 0; i < nMax; i++) { if (str == name[i]) { point[i] = value; break; } } } } public Myclass(int n) { point = new double[n]; name = new string[n]; nMax = n; setname(); } void setname() { for(int i=0;i<nMax;i++) { Console.Write("生徒名[{0}] = ",i); name[i] = Console.ReadLine(); } } } class ch08ex02 { public static void Main() { Console.WriteLine( "まずはじめに生徒数と、全員の名前入力が必要です"); Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } Console.WriteLine(); Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を知りたい生徒名--- "); ans = Console.ReadLine(); if (ans == "X") break; Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]); } } } //ここまで これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の    Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了");    while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } の部分が思い通りに動いてくれません。 まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。 しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。 つまり順番が逆になっているわけです。 なぜこうなるかわかりません。 誰か教えてください、お願いします。

  • C#のnull許容の警告について

    「Visual Studio」のNET6.0の環境でコードを書いています。 static string UserName; という変数の宣言に対して 「null非許容のフィールドUserNameには、コンストラクターの終了時にnull以外の値が入っていなければなりません。フィールドをNULL許容として宣言することをご検討ください。」 という警告を回避するために static string? UserName; というnull条件演算子で対応したのですが、上司に 「トリッキーな方法(?)ではなく、初期化や代入を使え」 と言われてしまい static string UserName = null ; という書き方を試したのですが 「nullリテラルをnull非許容参照型に変換できません」 という警告が出てしまい、警告を出さない書き方が分からず困っている状態です。 どなたか修正方法を教えて頂けないでしょうか? 【ソースコード】 static class Program { static string UserName; static void Name() { Console.WriteLine("ユーザ名を入力してください"); string? enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); UserName = enterName; } 以下省略

  • C#について

    using System; class AddressBook: PhoneBook { private string address; public AddressBook() : base() { address=""; } public void Input() { base.Input(); Console.Write("住所?"); string address=Console.ReadLine(); } public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } } class kadai62 { public static void Main() { Console.Write("電話帳に入力する人数を入れてください:"); int n = int.Parse(Console.ReadLine()); AddressBook[] pb = new AddressBook[n]; int i; for (i = 0; i < pb.Length; i++) { pb[i] = new AddressBook(); Console.WriteLine("{0}番目を入力してください.", i+1); pb[i].Input(); } Console.WriteLine(); while(true) { Console.Write("どこから探しますか?[1:氏名,2:自宅電話,3:携帯電話,0:終了] "); int t = int.Parse(Console.ReadLine()); if (t == 0) break; Console.Write("探す文字列は?"); string s = Console.ReadLine(); for (i = 0; i < pb.Length; i++) { if (pb[i].Search(t, s)) pb[i].Writes(); } } } } このプログラムで public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } のaddressが出力されません・・どうすれば 出力されますか?

  • C#のStreamReaderでのforeach

    StreamReader sr = new StringReader(filePath); foreach (Strins s in sr.ReadLine()) { } 上記プログラムでは 型'char'を'string'に変換できません。 と出てきて無理でした。 http://stackoverflow.com/questions/286533/filestream-streamreader-problem-in-c-sharp 此方を参考に、下記プログラムを書きました。 private static IEnumerable<string> ReadLine() { string str; while ((str = sr.ReadLine()) != null) { yield return str; } } private static void loop() { foreach (string str in ReadLine()) { } } 1. 下記のものは動くのですが、なぜ最初に書いたものではダメなのでしょうか? 2. もっと綺麗(スリム)に書くことはできないでしょうか? 3. string str; while ((str = sr.ReadLine()) != null) ↓ while((string str = sr.ReadLine()) != null) とするとエラーが出るのはなぜでしょうか? 宜しくお願いします。

  • C#のメンバ変数について

    下記のコードで enterName の変数を static void Resurut() のメソッドへの受け渡しが上手くいかず、どなたか修正点を教えて頂けないでしょうか? 【ソースコード】 static class Program { static string enterName; static int cntWin = 0; //勝利回数 static int cntLose = 0; //敗北回数 static int cntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); Start(); Resurut(); } *一部省略 static void Resurut() { if (cntWin > cntLose) { Console.WriteLine("{0}さんの総合勝利です", enterName); } else if (cntLose > cntWin) { Console.WriteLine("CPUの総合勝利です"); } else if (cntWin == cntLose) { Console.WriteLine("引き分けです"); } } }

  • c言語 型変換について

    c言語 型変換について 下記のように文字コードは、unsigned int型('B')をunsigned char 型(str[1] ) 格下げする型変換する規則を教えてください。 *質問ソースプログラム: int main(void) { char str[4]; /* 文字列を格納する配列 */ str[0] = 'A'; /* 代入 */ str[1] = 'B'; /* 代入 */ ・・・・・・ printf("size B %u\n",(unsigned)sizeof('B')); printf("size str[1] %u\n",(unsigned)sizeof(str[1])); * 実行結果 size B 4 size str[1] 1

  • C#の質問

    コンソールからの入力で2つの整数を取得したいのですが、 下記のように、2行に渡って取得する他ないのでしょうか? Console.WriteLine("何行何列ですか?"); int gyou = Convert.ToInt32(Console.ReadLine()); int retu = Convert.ToInt32(Console.ReadLine()); 私としましては、ユーザーに2,3のように1行で入力してもらって、 gyouには2をretuには3を保存したいのですが・・・。 そんなことは可能でしょうか? どなたかご教授お願いいたします。

  • C#のループについて

    現在C#でジャンケンゲームの課題に取り組んでいるのですが、ループ処理や各メソッドに対しての変数にエラーがでてしまい、修正方法が分からず、どなたか教えて頂けないでしょうか? ・ユーザはグー、チョキ、パーをそれぞれ1、2、3の数字で入力する。 ・CPUは乱数を使って出す手を選ぶ。 ・5回勝負として、人間とコンピュータの勝った回数を数え、勝敗がつくたびに1回ずつ表示する。    あいこは決着がつくまで再勝負。途中でどちらかが3勝しても、5回最後まで勝負を続ける。   ・指定された範囲以外の値を入力したら負けにする 【実行例】  ユーザ名を入力してください:goto  手を入力してください(グー1、チョキ2、パー3): 1  CPU:チョキ  WIN  goto:1勝、CPU:0勝    手を入力してください(グー1、チョキ2、パー3): 3  CPU:パー  DRAW    手を入力してください(グー1、チョキ2、パー3): 3  CPU:チョキ  LOSE  goto:1勝、CPU:1勝    手を入力してください(グー1、チョキ2、パー3): 0  LOSE(反則負け)  goto:1勝、CPU:2勝    (中略)    goto:3勝、CPU:2勝  gotoさんの総合勝利です! using System; namespace Ensyuu007 { static class Program { static string? Myhand; static int CntWin = 0; //勝利回数 static int CntLose = 0; //敗北回数 static int CntDraw = 0; //引分回数 //ユーザー名の入力 static void Main(string[] args) { string EnterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", EnterName); Console.ReadLine(); } //じゃんけんを5回行います。 for (int GameCnt = 0; GameCnt <= 5; GameCnt++) { //正しく入力されたかチェックを行うメソッド。 static string Check(ref string Myhand) { static = Console.ReadLine(); Console.WriteLine("手を入力してください(グー1、チョキ2、パー3):{0}", Myhand); //正しく入力されたかチェックします。 Check(ref Myhand); //0,1,2が入力された場合 if (Myhand.Equals("1") || Myhand.Equals("2") || Myhand.Equals("3")) { //入力した数字をそのまま返します。 return Myhand; } //1,2,3以外が入力された場合 else { Console.WriteLine("LOSE(反則負け)"); return Myhand; } } //じゃんけんを開始するメソッド。 static void Start() { //コンピューターとじゃんけんさせます。 Janken(ref Myhand); Console.ReadLine(); } //コンピュータと自分の入力した手を判別するメソッド static void Janken(ref string Myhand) { // Random クラスの新しいインスタンスを生成する Random ran = new System.Random(); //コンピュータの出す手を1以上3以下に設定する。 string[] com = new string[] { "1", "2", "3" }; string con = ran.Next(3).ToString(); //配列型、変数teに出す名前を設定 string[] te = { "グー", "チョキ", "パー" }; //コンピュータが勝利した場合 if (((Myhand == "1") && (con == "3")) || ((Myhand == "2") && (con == "1")) || ((Myhand == "3") && (con == "0"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("LOSE"); CntLose++; //敗北回数に加算 } //自分が勝利した場合 else if (((Myhand == "1") && (con == "2")) || ((Myhand == "2") && (con == "3")) || ((Myhand == "3") && (con == "1"))) { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("WIN"); CntWin++; //勝利回数に加算 } //あいこだった場合 else { Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand))); Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con))); Console.WriteLine("DRAW"); CntDraw++; //引分回数に加算 } } } static void Resurut() { if (CntWin > CntLose) { Console.WriteLine("総合勝利です"); } else if (CntLose < CntWin) { Console.WriteLine("CPUの総合勝利です"); }