【问题标题】:Error when i try to translate a string array to char array当我尝试将字符串数组转换为字符数组时出错
【发布时间】:2021-04-11 15:21:13
【问题描述】:

我是 c# 的新手,我想为学校创建一个计算器,但在第 45 行出现错误。错误消息:字符串必须恰好是一个字符长。我认为拆分 String 数组然后保存为 char 数组后出现错误。但我不知道为什么,可能是假字符。

代码部分:

string eingabe = txtergebnis.Text;   
string[] zahlen;    
string[] Operatoren;    
zahlen = eingabe.Split('+', '-', '*', '/');

Operatoren = eingabe.Split('0','1', '2', '3', '4', '5', '6', '7', '8','9',',');

double[] dZahlen = zahlen.Select(double.Parse).ToArray();

char[] charOperatoren = Operatoren.Select(char.Parse).ToArray();

string stringOperatoren = new string(charOperatoren);

错误消息来自 char[]。

我认为我的字符串 [] split 有翻译错误

【问题讨论】:

  • 一个字符串已经是一个字符数组。无需致电char.Parse。如果您只想要 char[] 在字符串上使用 ToCharArray。离题,但自 .NET 1 以来我一直是 c# 开发人员,我认为我曾经看到使用 char.Parse 的代码(出于任何原因)

标签: c# arrays string char


【解决方案1】:

您的解决方案是使用:

Operatoren.Where(o => !string.IsNullOrEmpty(o)).Select(char.Parse).ToArray();

因为您将运算符按数字分开。

假设您正在处理“1+2-3*4/5”的输入 所以你的“分裂”结果是:

['']['+']['-']['*']['/'] 

现在,如果您要访问第一个成员,此调用将在您收到的异常中结束,因为第一个元素为空。

Example here

但请注意 char.Parse 只是接受长度为 1 的 string (read documentation) 也许您应该考虑在此处使用另一个解析选项。 (Other question which maybe help you)

【讨论】:

    【解决方案2】:

    试试:

    char[] charOperatoren = eingabe.Where(x => x != ',' && !char.IsDigit(x)).ToArray();
    

    关于错误: char.Parse() 只接受长度为 1 的 strings

    Operatoren 的某些成员包含多于或少于一个字符(例如 empty string)。

    【讨论】:

      【解决方案3】:

      当您拆分不同的数字时,例如“12”将给出 3 个空字符串作为结果:

      • 字符串开头之前
      • 在“1”和“2”之间
      • 在字符串的末尾

      而且空字符串不能是字符。解决办法:

      Operatoren = eingabe.Split(new[] {'0','1', '2', '3', '4', '5', '6', '7', '8','9',','}, 
                   StringSplitOptions.RemoveEmptyEntries);
      

      这将删除那些空字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 2017-01-29
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        相关资源
        最近更新 更多