如何测试某些符号的字符串? (C#)

时间:2016-03-29 16:40:04

标签: c#

我正在尝试为我自己的语言编写一个编译器作为大学项目的一部分,并且在编写模块以确定字符串中的输入类型(alpha,numeric,delimiter等)时遇到了这个问题。 / p>

private static void readChar(ref string sentence, ref int inputType)
    {
        foreach (char test in sentence)
        {

            if ((test.CompareTo("|") == 0) |
                (test.CompareTo("*") == 0) |
                (test.CompareTo("/") == 0) |
                (test.CompareTo("+") == 0) |
                (test.CompareTo("-") == 0) |
                (test.CompareTo("@") == 0) |
                (test.CompareTo("#") == 0) |
                (test.CompareTo("$") == 0) |
                (test.CompareTo("%") == 0) |
                (test.CompareTo("^") == 0) |
                (test.CompareTo("&") == 0) |
                (test.CompareTo("(") == 0) |
                (test.CompareTo(")") == 0) |
                (test.CompareTo(",") == 0) |
                (test.CompareTo("`") == 0) |
                (test.CompareTo("=") == 0))
            {
                inputType = 5; // delimiter
            }
            else
            {
                if ((test.CompareTo("0") == 0) |
                    (test.CompareTo("1") == 0) |
                    (test.CompareTo("2") == 0) |
                    (test.CompareTo("3") == 0) |
                    (test.CompareTo("4") == 0) |
                    (test.CompareTo("5") == 0) |
                    (test.CompareTo("6") == 0) |
                    (test.CompareTo("7") == 0) |
                    (test.CompareTo("8") == 0) |
                    (test.CompareTo("9") == 0))
                {
                    inputType = 3; // numeric              
                } // end if compareTo Numeric
                else
                {
                    if ((test.CompareTo(" ") == 0)) inputType = 6; //space

                    else
                        if ((test.CompareTo(";") == 0)) inputType = 7;  //semicolon          
                        else
                        {
                            inputType = 1; // alpha
                        } // end alpha
                } // end else

            } // end if
        }

    } // end readChar

当我到达第一个if语句时,它返回此错误: mscorlib.dll

中发生了未处理的“System.ArgumentException”类型异常

附加信息:对象必须是Char。

类型

我不知道如何解决这个问题,因为我正在使用char进行测试,并且不知道错误所指的是哪个对象。

感谢阅读,我感谢任何帮助^^

4 个答案:

答案 0 :(得分:3)

双引号"asdf..."之间的任何内容都是字符串文字。 如果您需要char字面值,请使用单引号'a'

private static void readChar(ref string sentence, ref int inputType)
{
    foreach (char test in sentence)
    {

        if ((test.CompareTo('|') == 0) |
            (test.CompareTo('*') == 0) |
            (test.CompareTo('/') == 0) |
            (test.CompareTo('+') == 0) |
            (test.CompareTo('-') == 0) |
            (test.CompareTo('@') == 0) |
            (test.CompareTo('#') == 0) |
            (test.CompareTo('$') == 0) |
            (test.CompareTo('%') == 0) |
            (test.CompareTo('^') == 0) |
            (test.CompareTo('&') == 0) |
            (test.CompareTo('(') == 0) |
            (test.CompareTo(')') == 0) |
            (test.CompareTo(',') == 0) |
            (test.CompareTo('`') == 0) |
            (test.CompareTo('=') == 0))
        {
            ......

答案 1 :(得分:1)

您收到错误是因为您使用了归因于字符串的引号。使用单引号。

{{1}}

答案 2 :(得分:1)

快速建议:

private static void ReadChar(string sentence, ref int inputType)
{
    foreach (char test in sentence) {
        if ("|*/+-@#$%^&(),`=".Contains(test)) {
            inputType = 5;
        } // delimiter
        else if (Char.IsDigit(test)) {
            inputType = 3;
        } // numeric              
        else if (Char.IsWhiteSpace(test)) {
            inputType = 6;
        } // space
        else if (test == ';') {
            inputType = 7;
        } // semicolon          
        else {
            inputType = 1;
        } // end alpha
    }
}

答案 3 :(得分:0)

CompareTo方法接受 char 进行比较。您正在传递字符串
使用'char'的单引号为"string"

的双引号