我正在尝试为我自己的语言编写一个编译器作为大学项目的一部分,并且在编写模块以确定字符串中的输入类型(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进行测试,并且不知道错误所指的是哪个对象。
感谢阅读,我感谢任何帮助^^
答案 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"