计算ListNode中对象的总和

本文关键字:对象 ListNode 计算 | 更新日期: 2024-05-04 14:21:18

如何制作一个方法来计算listOfNodes对象的总和?我做的是像一样的foreach语句

foreach(int s in listOfNodes)
    sum += s;

获取所有节点,但没有成功。

上面写着:

Error   1   foreach statement cannot operate on variables of type 'ConsoleApplication1.Program.List' because 'ConsoleApplication1.Program.List' does not contain a public definition for 'GetEnumerator'    C:'Users'TBM'Desktop'I'ConsoleApplication1'ConsoleApplication1'Program.cs   24  13  ConsoleApplication1

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List listOfNodes = new List();
            Random r = new Random();
            int sum = 0;
            for (int i = 0; i < 10; i++)
            {
                listOfNodes.addObjects(r.Next(1, 100));
            }
            listOfNodes.DisplayList();
                Console.ReadLine();
        }
        class ListNode
        {
            public object inData { get; private set; }
            public ListNode Next { get; set; }
            public ListNode(object dataValues)
                : this(dataValues, null) { }
            public ListNode(object dataValues, 
                ListNode nextNode)
            {
                inData = dataValues; Next = nextNode;
            }
        } // end class ListNode
        public class List
        {
            private ListNode firstNode, lastNode;
            private string name;
            public List(string nameOfList)
            {
                name = nameOfList;
                firstNode = lastNode = null;
            }
            public List()//carieli list konstruktori saxelis "listOfNodes"
                : this("listOfNodes") { }

            public void addObjects(object inItem)
            {
                if (isEmpty())
                { firstNode = lastNode = new ListNode(inItem); }
                else { firstNode = new ListNode(inItem, firstNode); }
            }
            private bool isEmpty()
            {
                return firstNode == null;
            }
            public void DisplayList()
            {
                if (isEmpty())
                { Console.Write("Empty " + name); }
                else
                { 
                    Console.Write("The " + name + " is:'n");
                    ListNode current = firstNode;
                    while (current != null)
                    {
                        Console.Write(current.inData + " ");
                        current = current.Next;
                    }
                    Console.WriteLine("'n");
                }
            }
        }//end of class List
    }
}

计算ListNode中对象的总和

正如错误消息所说,您需要实现GetEnumerator,以便在某些方面实现foreach。因此,实现GetEnumerator:

public IEnumerator GetEnumerator()
{
    ListNode node = firstNode;
    while (node != null)
    {
        yield return node;
        node = node.Next;
    }
}

如果需要的话,现在可以让List类实现IEnumerable接口。

另一种选择是不使用foreach循环,而是使用while循环,就像我在这里所做的,或者您在DisplayList方法中所做的那样。