C# 我的helper方法应该返回char还是字符串?

C# 我的helper方法应该返回char还是字符串?,c#,string,char,C#,String,Char,XNA有一个方法,Keyboard.GetState(),它返回键盘的状态。您可以通过Keys枚举轮询某个特定键是否被按下,该枚举“碰巧”与常规C#使用的相同 无论如何,我需要一种将枚举转换为可读字母的方法,例如用于在自定义文本框中键入,因此我制作了如下扩展方法: public static char ToChar(this Keys obj, bool shift, bool caps) { switch (obj) { case (Keys.A): retur

XNA有一个方法,
Keyboard.GetState()
,它返回键盘的状态。您可以通过
Keys
枚举轮询某个特定键是否被按下,该枚举“碰巧”与常规C#使用的相同

无论如何,我需要一种将枚举转换为可读字母的方法,例如用于在自定义文本框中键入,因此我制作了如下扩展方法:

public static char ToChar(this Keys obj, bool shift, bool caps)
{
    switch (obj)
    {
        case (Keys.A): return (shift ^ caps) ? 'A' : 'a';
        case (Keys.B): return (shift ^ caps) ? 'B' : 'b';
        case (Keys.C): return (shift ^ caps) ? 'C' : 'c';

        ...

        case (Keys.OemOpenBrackets): return (!shift) ? '[' : '{';
        case (Keys.OemCloseBrackets): return (!shift) ? ']' : '}';
        case (Keys.OemPipe): return (!shift) ? '\\' : '|';
        case (Keys.OemSemicolon): return (!shift) ? ';' : ':';
        case (Keys.OemQuotes): return (!shift) ? '\'' : '"';
        case (Keys.OemComma): return (!shift) ? ',' : '<';
        case (Keys.OemPeriod): return (!shift) ? '.' : '>';
        case (Keys.OemQuestion): return (!shift) ? '/' : '?';

        ...

        default: return ' ';
    }
}
publicstaticchartochar(此键为obj、boolshift、boolcaps)
{
开关(obj)
{
case(key.A):return(shift^caps)?'A':'A';
案例(B键):返回(shift^caps)?'B':'B';
case(key.C):return(shift^caps)?'C':'C';
...
case(Keys.oempenbrakets):返回(!shift)'[':'{';
大小写(Keys.oemclose括号):返回(!shift)']':'}';
大小写(Keys.OemPipe):返回(!shift)“\\”:“\\”;
大小写(Keys.OemSemicolon):返回(!shift)';':':';
case(Keys.OemQuotes):返回(!shift)'\'':';
case(key.OemComma):返回(!shift)',':';
case(Keys.OemQuestion):返回(!shift)“/”:“?”;
...
默认值:返回“”;
}
}
我并不十分担心速度,因为这只会以用户可以键入的速度调用,而不是在一个紧凑的循环中调用。但是,将箭头键或翻页混合会导致
,返回一个空白字符(根据默认设置)


使用
char?
,在使用不可打印字符的情况下返回null,或者使用
string
,这样我就可以返回
string.Empty

尝试替换它,它返回一个空格:

return ' ';
其中,
\0
表示:


由于您正在显示这些字符,希望现在您不会得到一个长的空格字符串。

根据您可能需要的信息量,字符串可能更有意义,或者您也可以创建自己的类型,该类型可能包含有关按下的键的上下文,同样也可以包含该键作为其属性之一。请尝试替换
return'
使用
return'\0'
,我倾向于使用char,因为它感觉“更轻”,在按键的上下文中更有意义。我也有上下文,因为此方法(可能)被称为对按键事件的响应。和@grantwiney,这正是我需要的。如果你把它作为答案发布,我会给你一个亮绿色的复选标记:)我在使用Console.WriteLine()在我输入时测试输入,它在大多数情况下似乎工作正常。但是,如果我将上面的“\0”内容传递给它,之后它似乎不会打印任何字符。你知道为什么吗?我不知道。我也可以复制它。显然,它对该输入不太满意,但我不确定内部发生了什么。我想作为一个您可以检测到“\0”被返回,而不将其写入控制台。
return '\0';