2013-11-26 4 views
1

Как я могу сделать способ вычисления суммы listOfNodes объектов? Я делал с заявлением foreach какРассчитать сумму объектов в ListNode

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 
    } 
} 
+0

Вы знаете, что '.NET' уже имеет' LinkedList '. Я предполагаю, что это какой-то школьный проект, и вы узнаете о них позже. – ja72

ответ

1

Как сказано в сообщении об ошибке, необходимо реализовать GetEnumerator, чтобы foreach над чем-то. Таким образом, реализовать GetEnumerator:

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

Теперь вы можете иметь свой List класс реализует интерфейс IEnumerable тоже, если вы хотите.

Альтернативой было бы не использовать цикл foreach, а вместо этого использовать цикл while, как я здесь, или вы сделали в своем методе DisplayList.

Смежные вопросы