[英]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.