繁体   English   中英

如何在C#中将整数转换为字符?

[英]How do I convert integers to characters in C#?

我正在尝试将1到27的索引转换为相应的大写字母。 我知道在C ++中可以输入以下内容:

char letter = 'A' + (char)(myIndex % 27);

相同的代码在C#中不起作用。 如何在C#中完成此任务?

编辑:如果有像上面那样的更好的数学解决方案,我宁愿不必为此编码枚举或切换语句。

当您添加(或减去)两个字符时,您将在C#中获得一个Int32。 这将起作用:

int letter = 'A' + (char)(myIndex % 27);

如果您想要一个字符,则需要再次明确地强制转换它:

char letter = (char) ('A' + (char)(myIndex % 27));

但是,这实际上很可能应该是:

char letter = (char) ('A' + (char)((myIndex - 1) % 26));

这是一个表驱动的解决方案:

char ToUpperChar(int index)
{
    if (index < 1 || index > 26)
        throw new ArgumentOutOfRangeException("index");

    return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[index-1]; // took out the % - it's range-checked above.
}
char letter = (char)('A' + (myIndex-1)%26);

(编辑出幻数,调整索引)

在C#中,您必须稍微进行一些转换:

char letter = (char)('A' + (myIndex % 27));

但是,您的数学也可能是错误的,这可能更接近于您实际想要的:

char letter = (char)('A' + ((myIndex - 1) % 26));

扩展方法怎么样?

    public static int Index(this char letter)
    {
        const int offset = 64;
        if(letter >= 'A' && letter <= 'Z')
            return (Convert.ToInt32(letter) - offset);
        return 0;
    }

//用法... char字母='A'; int索引= letter.Index();

这应该工作...

byte upperA = 65;
byte index = 1;

char letter = (char)(upperA + (index % 27));

Console.WriteLine(letter);

我也喜欢里德的回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM