我的帮助方法应该返回char还是字符串?

时间:2014-11-02 03:35:55

标签: c# string char

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 ' ';
    }
}

我并不十分关注速度,因为只会在用户输入时调用,而不是在紧密循环内。但是,将箭头键或向上页面混合将导致,返回一个空白字符(默认情况下)。

使用char?实际上更有意义,在使用不可打印字符的情况下返回null吗?或者可能是string,以便我可以返回String.Empty

1 个答案:

答案 0 :(得分:1)

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

return ' ';

这样,\0表示null character

return '\0';

由于你正在显示这些字符,所以现在你不会得到很长的空格。