我试图将1到27的索引转换成相应的大写字母。我知道在C++中我可以输入:如何将整数转换为C#中的字符?
char letter = 'A' + (char)(myIndex % 27);
这个相同的代码在C#中不起作用。我怎样才能在C#中完成这项任务?
编辑:我宁可不必编码一个枚举或开关语句,如果有一个更好的数学解决方案,如上面那个。
我试图将1到27的索引转换成相应的大写字母。我知道在C++中我可以输入:如何将整数转换为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));
你应该s/27/26/g – Vlad 2010-04-12 19:12:01
是的,但我想做OP的代码的等价物。 – 2010-04-12 19:12:50
@Vlad:你更喜欢那样? – 2010-04-12 19:13:24
char letter = (char)('A' + (myIndex-1)%26);
(编辑出幻数,调整指数)
对不起,-1为幻数 – 2010-04-12 19:05:53
哦,对。 '%26'。谢谢。我想我是让这一个比所需要的更难。 – 2010-04-12 19:44:26
在C#中,你必须做你的铸造略有不同:
char letter = (char)('A' + (myIndex % 27));
然而,你的数学也可能是错的,这可能更接近你真正想要的:
char letter = (char)('A' + ((myIndex - 1) % 26));
这应该工作...
byte upperA = 65;
byte index = 1;
char letter = (char)(upperA + (index % 27));
Console.WriteLine(letter);
我也像里德的回答。
这里是一个表驱动的解决方案:
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.
}
+1更原始的方法。所以很多类型铸件变得无聊;)它纯粹是数学的,因为数组索引是指针算术的语法糖。 – 2010-04-12 20:02:59
如何扩展方法?
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();
对不起!错误的方法。尝试这个... public static char CharToIndex(this int number)const int offset = 64;如果(number> = 1 && number <= 26) return(Convert.ToChar(number + offset)); 返回'\ 0'; } //使用... int i = 1; char c = i.CharToIndex(); – soulia 2010-04-13 20:40:27
char letter = Convert.ToChar(myIndex); – 2013-03-07 13:47:43