switch case
не работает подобный. Он использует тип данных аргумента, который вы передаете:
string x = Console.ReadLine();
switch(x) //x is the argument for switch
Как есть. В вашем случае x
всегда string
. Коммутатор проверяет значение аргумента и найти разработанный case
для этого значения, он не проверить типа аргумента и найти разработанный case
для этого значения.
Но если ваша цель состоит в том, чтобы проверить, если string
является конвертируемые в int
, double
, DateTime
, некоторые другие типы данных, или могут быть прочитаны только string
, вы должны делать это с TryParse
для отдельных типов данных:
int myInt;
double myDouble;
bool r1 = int.TryParse(x, out myInt); //r1 is true if x can be parsed to int
bool r2 = double.TryParse(x, out myDouble); //r2 is true if x can be parsed to double
Edit:
Поскольку это необходимо использовать switch
случай, то вы можете положить ю е приводит к целому числу:
int a = (r1 ? 1 << 1 : 0) + (r2 ? 1 : 0); //0 if string, 1 if int, 2 if double, 3 if int or double
с использованием концепции bit-flag
и сделать switch
дело так:
switch (a){
case 0: //string case
Console.WriteLine(x + "*");
break;
case 1: //int case
Console.WriteLine((Convert.ToInt32(x) + 1).ToString());
break;
case 2: //double case
Console.WriteLine((Convert.ToDouble(x) + 1).ToString());
break;
case 3: //int or double case
Console.WriteLine((Convert.ToInt32(x) + 1).ToString());
break;
}
Оригинал:
Затем вы можете сделать что-то вроде этого:
if (r1){ //parsable to int
//do something, like raise the number by 1
myInt += 1;
x = myInt.ToString();
} else if (r2){ //parsable to double
//do something, like raise the number by 1
myDouble += 1;
x = myDouble.ToString();
} else { //cannot be parsed to any
//do something like add `*`
x = x + "*";
}
Console.WriteLine(x);
'x.GetType() ToString();. 'Это, как вы можете получить тип' x', но в вашем случае это будет всегда 'String'. – SeM
@SeM: Нет, не нужно - 'x' всегда ссылается на строку или на нуль. –
Я подозреваю, что вы должны посмотреть на 'int.TryParse' и' double.TryParse', считая, что вход действительно будет «это строка», «10», «10,5» и т. Д. –