我正在尝试将索引1到27转换为相应的大写字母。我知道在C ++中我可以输入:
char letter = 'A' + (char)(myIndex % 27);
此相同的代码在C#中不起作用。如何在C#中完成此任务?
编辑:如果有更好的数学解决方案,我宁愿不必为此编码枚举或开关语句。
答案 0 :(得分:8)
当您添加(或减去)两个字符时,您将获得C#中的Int32。这将有效:
int letter = 'A' + (char)(myIndex % 27);
如果你想要一个字符,你需要再次明确地再次使用它:
char letter = (char) ('A' + (char)(myIndex % 27));
然而,这很可能应该是:
char letter = (char) ('A' + (char)((myIndex - 1) % 26));
答案 1 :(得分:6)
这是一个表驱动的解决方案:
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.
}
答案 2 :(得分:4)
char letter = (char)('A' + (myIndex-1)%26);
(编辑幻数,调整后的指数)
答案 3 :(得分:2)
在C#中,您必须采用略有不同的方式进行投射:
char letter = (char)('A' + (myIndex % 27));
然而,你的数学可能也是错误的,这可能更接近你真正想要的东西:
char letter = (char)('A' + ((myIndex - 1) % 26));
答案 4 :(得分:1)
扩展方法怎么样?
public static int Index(this char letter)
{
const int offset = 64;
if(letter >= 'A' && letter <= 'Z')
return (Convert.ToInt32(letter) - offset);
return 0;
}
//使用... char letter ='A'; int index = letter.Index();
答案 5 :(得分:0)
这应该有用......
byte upperA = 65;
byte index = 1;
char letter = (char)(upperA + (index % 27));
Console.WriteLine(letter);
我也喜欢里德的回答。