我可以通过加法增加c#字符的值吗?

本文关键字:字符 可以通过 增加 | 更新日期: 2023-09-27 18:05:26

例如,我想做如下的事情:

char output = 'A' + 1;

得到'B'的输出

但是,简单地尝试我上面所做的会给出一个类型转换错误

我可以通过加法增加c#字符的值吗?

是的,二进制+运算符没有在char上定义,因此您最终将隐式转换为int。可以使用前置/后自增操作符:

char x = 'A';
x++;

…因为++运算符是为char定义的

否则,需要强制转换:

char x = 'A';
x = (char) (x + 1);

您需要自己强制转换操作,如下所示

char output = (char)('A' + 1);

正如其他人所指出的,是的,这绝对是可能的。其他的答案都给出了例子,所以我就不再重复了。然而,我想在这里给出警告:如果您所做的只是"盲目地"向字符添加数字,那么您可能会得到意想不到的结果。例如,Z + 1 = '['。如果这是你期望的结果,那很好,否则你必须处理它。也有可能添加到一个字符会导致一个不可打印的字符(例如~ + 1 = 'DEL',这是不可打印的,'DEL' + 1不再是"标准"ASCII了)。

你必须考虑以下情况:将1加到Z、Z或9的结果是什么?你能得到非字母输入或输出-例如{+ 1 (result: '|')是有效的吗?那么Z + 1 = '['呢?如何处理ASCII 127(最后一个有效的ASCII字符)?不可打印的字符呢?

如果,例如,你希望输入只有字母和数字,你希望结果"绕"在有效范围的末尾(例如Z + 1 = A, Z + 1 = A, 9 + 1 = 0),你可以做下面的事情:

char bChar = 'A'; // Or whatever you want, obviously
switch (bChar)
        {
            case 'z':
                bChar = 'a';
                break;
            case 'Z':
                bChar = 'A';
                break;
            case '9':
                bChar = '0';
                break;
            default:
                bChar++;
                break;
        }
最重要的是要决定这些"边缘情况"应该发生什么,并确保你正确处理它们。

尝试:

int ASCIINumber = (int)'A'; //101 A
char charResult = Convert.ToChar(ASCIINumber + 1);  //102 or B