【问题标题】:How do I pass an int to an IEnumerable?如何将 int 传递给 IEnumerable?
【发布时间】:2020-06-16 07:26:32
【问题描述】:

我的代码给了我以下错误:编译错误(第 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();
    }
}

【问题讨论】:

  • 当您需要 IEnumerable 时,您正在将 int 值传递给您的 PrintValues 方法。要么将 PrintValues 方法的签名更改为采用 int,要么将整个数组传递给该方法。
  • 当您致电PrintValues(i) 时,您预计会发生什么,为什么?在该方法中,您希望如何循环单个整数?
  • 你可以把它换成Console.WriteLine(i)为什么你需要打电话给PrintValues

标签: c# list listview ienumerable rpn


【解决方案1】:

看来你只想输出当前分支的index (if)

直接拨打Console.WriteConsole.WriteLine即可

...
else if (infixray[i].Equals("*") || infixray[i].Equals("+") || infixray[i].Equals("/") || infixray[i].Equals("-"))
{
     Console.WriteLine("    {i}");
     opStack.Push(infixray[i]);

【讨论】:

    【解决方案2】:

    *"如何将 int 传递给 IEnumerable?"

    您可以创建一个包含int 的单项列表(实现IEnumerable)并将其传递给方法:

    PrintValues(new List<int> { i });
    

    或者,让我们阅读编译器发送给我们的消息:

    “'Program.PrintValues(System.Collections.IEnumerable)' 的最佳重载方法匹配有一些无效参数”

    由于编译器抱怨没有合适的重载,我们可以通过编写采用int 参数的方法的重载来为其提供一个:

    public static void PrintValues(int item)
    {
        Console.WriteLine("    {0}", item);
    }
    

    (当然现在复数方法名没有多大意义,所以也许新的方法名也需要,比如PrintValue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2014-03-10
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多