質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

4回答

3955閲覧

const文字列の数値への変換

poemt

総合スコア48

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/01/25 04:28

いつもお世話になっております。

###前提・実現したいこと
constの文字列を数値に変換してswitch文のcaseに使いたい。

###発生している問題・エラーメッセージ
以下の"case Int32.Parse(one):"において
"定数値が必要です"のエラーメッセージ

###該当のソースコード
public class class1{

public const string one = "1";
public const int two = 2;

public void method(){
string str;

str = (何らかの数値を文字列として代入);

switch (Int32.Parse(str)){
case two:
...
break;
case Int32.Parse(one):
...
break;
default:
break;
return;
}

}

}

普通の変数の代入
int var = Int32.Parse(one);
はエラーメッセージがでないため、caseのほうに条件があるのでしょうか?
もしそうであれば対処方法を教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

case条件に"Int32.Parse(one):"と書くのがダメだと思います。
"case two"はconstした変数だからOKです(本来caseに変数は使えない。定数のみ)が、Int32.Parseしてしまっているので変数がconstとみなされていないのだと思います。

投稿2017/01/25 04:38

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

switch case 構文で case の式にかけるのは定数式(コンパイルの時点で値が決定する)のみと決まっています。Int32.parse(one) は、定数式ではありません。
※定数を引数とする関数は、定数式ではない

投稿2017/01/25 04:37

編集2017/01/25 04:38
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

case のラベルには定数しか使えません。次のようにしてください。

public readonly int one = 1; 中略 case one:

投稿2017/01/25 04:46

編集2017/01/25 04:52
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poemt

2017/01/25 05:05

回答くださった皆様ありがとうございます。 case の仕様をよく把握していませんでした。 対処法も含めて具体的に教えてくださったこの回答をベストアンサーにしたいと思います。
guest

0

文字列が数値になるか分からない為、TryParseをお勧めします。

string str = "-12";

//intに変換できるか確かめる
int i;
if (int.TryParse(str, out i))
{
switch(){
case one
..
}
}
else
{
Console.WriteLine("{0} は数字ではありません。", str);
}

投稿2017/01/25 04:43

107User

総合スコア78

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問