我的代码给我以下错误:编译错误(第23行,第5行):'Program.PrintValues(System.Collections.IEnumerable)'的最佳重载方法匹配具有一些无效的参数编译错误(第23行,第17行):参数1:无法从'int'转换为'System.Collections.IEnumerable'“
using System;
using System.Collections;
public class Program
{
public static void Main()
{
Stack opStack = new Stack();
Stack valStack = new Stack();
Stack postStack = new Stack();
string infix = "A*B+C/D";
Console.WriteLine(infix);
char[] infixray = infix.ToCharArray();
for (int i = 0; i < infixray.Length; i++)
{
//Console.WriteLine(infixray[i]);
if (!infixray[i].Equals("*") || !infixray[i].Equals("+") || !infixray[i].Equals("/") || !infixray[i].Equals("-"))
{
postStack.Push(infixray[i]);
}
else if (infixray[i].Equals("*") || infixray[i].Equals("+") || infixray[i].Equals("/") || infixray[i].Equals("-"))
{
**PrintValues(i);**
opStack.Push(infixray[i]);
//int multpres=1, divpres=2, addpres=3, subpres=4;
postStack.Push(infixray[i]);
opStack.Push(infixray[i]);
valStack.Pop();
//valStack.Pop();
}
PrintValues(postStack);
}
}
public static void PrintValues(IEnumerable myCollection)
{
foreach (Object obj in myCollection)
Console.Write(" {0}", obj);
Console.WriteLine();
}
}
似乎您只想输出当前分支(if
)的index
只需直接调用Console.Write
或Console.WriteLine
...
else if (infixray[i].Equals("*") || infixray[i].Equals("+") || infixray[i].Equals("/") || infixray[i].Equals("-"))
{
Console.WriteLine(" {i}");
opStack.Push(infixray[i]);
*“如何将int传递给IEnumerable?”
您可以创建包含IEnumerable
的单项列表(实现int
),并将其传递给方法:
PrintValues(new List<int> { i });
“'Program.PrintValues(System.Collections.IEnumerable)'的最佳重载方法匹配具有一些无效的参数”
但是由于编译器在抱怨没有合适的重载,因此我们可以通过编写带有int
参数的方法的重载来为其提供一个重载:
public static void PrintValues(int item)
{
Console.WriteLine(" {0}", item);
}