为什么我的开关在有单引号时工作?

  • 本文关键字:单引号 工作 开关 c#
  • 更新时间 :
  • 英文 :


所以免责声明,我对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 命令像这样工作得很好。我不小心做的是最初放置了大小写"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表达式,这就是你所拥有的。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 码位。

最新更新