gpt4 book ai didi

c# - 在 switch 语句的默认部分中使用负数作为 char

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:46 25 4
gpt4 key购买 nike

我不是在寻找任何特定的代码示例,但有人可以解释为什么我无法让“-1”在此 switch 语句末尾起作用吗?它一直说 char 类型“文字太多”。 (接近那个)。我必须将其转换为另一种类型吗?

感谢您的帮助,请只解释而不提供代码。我很想通过实践经验来学习这一点:D

Convert 7 char passed from ProcessInput() by reference to upper case
Use switch statement to translate char into their corresponding digits (case statement for each digit and each valid uppercase letter)
**TROUBLES WITH THIS PART***Write default case that returns error code (-1) for invalid letters
If no invalide letters, return 0

    static void ToDigit(ref char digit)
{

digit = Char.ToUpper(digit);
char result;

switch (digit)
{
case '0': result = '0';
break;

case '1': result = '1';
break;

case '2':
case 'A':
case 'B':
case 'C': result = '2';
break;

case '3':
case 'D':
case 'E':
case 'F': result = '3';
break;

case '4':
case 'G':
case 'H':
case 'I': result = '4';
break;

case '5':
case 'J':
case 'K':
case 'L': result = '5';
break;

case '6':
case 'M':
case 'N':
case 'O': result = '6';
break;

case '7':
case 'P':
case 'Q':
case 'R':
case 'S': result = '7';
break;

case '8':
case 'T':
case 'U':
case 'V': result = '8';
break;

case '9':
case 'W':
case 'X':
case 'Y':
case 'Z': result = '9';
break;
//Says I can't enter -1 as char "too many characters in character literal
default: result = 'e';
break;
}
digit = result;
}

最佳答案

顾名思义,char 是一个单个字符。一组全部“串在一起”的字符在 C# 中称为 string

如果你想要整数值 -1 作为一个 char 那么你可以通过说 unchecked((char)(-1)) (*) 但是你应该意识到这是一个非常糟糕的主意。我假设这是你的任务:

Write default case that returns error code (-1) for invalid letters.

这不是 C# 中的工作方式;返回一个“坏”值来指示失败是“最糟糕的做法”——这是 1970 年代风格的 C 编程的特征,但不是 C#。

这里正确的做法是 (1) 完全没有错误情况;如果没有大写形式,则根本不转换字符,或者 (2) 如果输入错误则抛出异常,或者 (3) 返回可为 null 的字符,并为“错误”值返回 null。

此外,您的程序采用 ref 而不是返回值这一事实令人深感怀疑。 ToDigit 方法应该是计算并返回结果,而不是改变变量

我认为您正在学习的任何类(class)都是几十年前编写的,最初完全针对一种不同的语言,并且从未更新为使用现代最佳实践。我会严重质疑这些 Material 的值(value)。


在将常量 -1 转换为类型 T 时,在 C# 中总是说 (T)(-1),而不是 (T)-1。如果你用后一种方式写,读者可能会混淆你的意思是“从 T 中减去 1”还是“将负数转换为 T”。

关于c# - 在 switch 语句的默认部分中使用负数作为 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143361/

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