如何获取C#中所有可打印字符的列表?

Phi*_*ett 19 c#

我希望能够获得C#中所有可打印字符的char数组,有人知道怎么做吗?

编辑:

可打印我的意思是可见的欧洲字符,所以是的,变音符号,波浪号,重音等.

Fre*_*örk 29

这将为您提供一个列表,其中包含所有不被视为控制字符的字符:

List<Char> printableChars = new List<char>();
for (int i = char.MinValue; i <= char.MaxValue; i++)
{
    char c = Convert.ToChar(i);
    if (!char.IsControl(c))
    {
        printableChars.Add(c);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能需要调查其他Char.IsXxxx方法以找到适合您要求的组合.

  • 出于我不明白的原因,如果你这样做: for (char c = char.MinValue; c &lt;= char.MaxValue; c++) OutOfMemoryException - 列表很快填满 (2认同)
  • 看起来 c++ 语句使计数器在 65535 之后换行为 0,这意味着 c &lt;= char.MaxValue 将始终为真。int 可以容纳更大的值,因此它会增加超过 char.MaxValue,并且满足退出条件并且循环停止。 (2认同)

Jon*_*eet 20

这是Fredrik解决方案的LINQ版本.请注意,Enumerable.Range产生一个,IEnumerable<int>所以你必须先转换为字符.Cast<char>我相信会在3.5SP0工作,但从3.5SP1开始,你必须做一个"正确"的转换:

var chars = Enumerable.Range(0, char.MaxValue+1)
                      .Select(i => (char) i)
                      .Where(c => !char.IsControl(c))
                      .ToArray();
Run Code Online (Sandbox Code Playgroud)

我已经将结果创建为一个数组,因为这就是问题所要求的 - 尽管它不一定是最好的主意.这取决于用例.

请注意,这也不考虑完整的Unicode字符,只考虑基本多语言平面中的字符.我不知道它为高/低代理人返回什么,但至少知道单个char并不能真正让你代表一切:{