gpt4 book ai didi

c# - 从 Console.ReadLine 输入中检索数据类型

转载 作者:太空狗 更新时间:2023-10-30 01:32:44 25 4
gpt4 key购买 nike

我是编程新手,我遇到了挑战,但我需要你的帮助。我的任务是编写一个从控制台读取内容的程序,然后如果它的数字将打印 1,如果它的字符串将如下所示 (string + *)。这是我的代码,但有问题,我无法弄清楚。必须使用 Switch - Case。

static void Main(string[] args)
{
string x = Console.ReadLine();
switch (x)
{
case "int" :
int i = int.Parse(x);
i = i + 1;
Console.WriteLine(i);
break;
case "double":
double d = double.Parse(x);
d = d + 1;
Console.WriteLine(d);
break;
case "string":
string s = (x);
Console.WriteLine(s + "*");
break;
default:
break;
}
}

最佳答案

switch case 不是那样工作的。它采用您传递的参数的数据类型:

string x = Console.ReadLine();
switch(x) //x is the argument for switch

原样。在您的情况下,x 始终是一个 string。 Switch 检查参数的 并找到该值的设计case,它检查类型参数并找到为该值设计的 case

但是,如果您的目标是检查 string 是否可转换intdoubleDateTime,一些其他的数据类型,或者只能读取为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

编辑:

既然一定要用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 case做成这样:

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);

关于c# - 从 Console.ReadLine 输入中检索数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com