计算ListNode中对象的总和

时间:2013-11-26 20:16:41

标签: c# .net data-structures

如何制作计算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
    }
}

1 个答案:

答案 0 :(得分:1)

正如错误消息所示,您需要实施GetEnumerator才能foreach处理某些内容。因此,实施GetEnumerator

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

如果需要,您现在也可以让List课程实现IEnumerable界面。

替代方法是不使用foreach循环,而是使用while循环,就像我在此处所做的那样,或者使用DisplayList方法。