Как передать int в IEnumerable? - PullRequest
0 голосов
/ 03 марта 2020

Мой код выдает мне следующую ошибку: Ошибка компиляции (строка 23, столбец 5): наилучшее перегруженное соответствие метода для «Program.PrintValues ​​(System.Collections.IEnumerable)» содержит недопустимые аргументы Ошибка компиляции (строка 23, col 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();
    }
}

Ответы [ 2 ]

1 голос
/ 04 марта 2020

* «Как передать 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);
}

(конечно, теперь имя метода множественного числа не имеет особого смысла, поэтому, возможно, новое имя метода также по порядку, как PrintValue )

0 голосов
/ 03 марта 2020

Кажется, вы просто хотите вывести index текущей ветви (if)

Просто позвоните 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]);
...