gpt4 book ai didi

c# - 为什么我的 switch 在有单引号时起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:04 24 4
gpt4 key购买 nike

所以免责声明,我是 C# 的新手,正在尝试学习更复杂的知识。我有一个我编码的类作业并且它有效,但我不确定它为什么有效,并且想了解它。

这是代码,它不是完整的代码,我只是删掉了相关部分:

    int studentType = 0;
switch (studentType)
{
case 1:
studentType = '1';
WriteLine("What is your GPA?");
gpa = Convert.ToDouble(ReadLine());
break;

case 2:
studentType = '2';
WriteLine("What is the title of your thesis?");
thesis = ReadLine();
break;

case 3:
studentType = '3';
WriteLine("What is the title of your dissertation?");
dissertation = ReadLine();
break;

case 4:
break;

default:
WriteLine("Invalid option input.");
break;
}//Switch for student Type

如前所述,case 命令像这样工作得非常好。我不小心做了一开始就放了 case 'x': ,但最终没有用,所以我删除了所有的单引号。

这是第二部分,为什么我感到困惑:

    switch (studentType)
{
case '1':
case '4':
WriteLine($"GPA: {gpa:f2}");
break;

case '3':
WriteLine($"Dissertation title: {dissertation}");
break;

case '2':
WriteLine($"Thesis title: {thesis}");
break;
}//end of studentType switch

所以最初我尝试在不使用单引号的情况下编写案例,但每次运行 1 时,GPA 都不会填充,所以我尝试放入单引号,并且它有效,但我不确定为什么。

因为 studentType 是一个整数,所以第一个开关没有单引号是有意义的,但是开关怎么需要单引号呢?

我想我可以按原样提交,只要它能正常工作,但我主要想了解发生了什么。

感谢您的帮助!

最佳答案

存在从charint的隐式转换,常量char表达式可以作为常量int expression,这就是你所拥有的。 int 的值是与 char 关联的 UTF-16 代码单元。

这是另一个例子:

const int X = 'x';

这也是您的赋值语句起作用的原因:

studentType = '1';

所以这样:

int value = ...;
switch (value)
{
case '1':
// ...
break;
}

相当于:

int value = ...;
switch (value)
{
case 49:
// ...
break;
}

...因为 49 是与字符“1”关联的 UTF-16 代码点。

关于c# - 为什么我的 switch 在有单引号时起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48419549/

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