计算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
}
}
正如错误消息所说,您需要实现GetEnumerator
,以便在某些方面实现foreach
。因此,实现GetEnumerator
:
public IEnumerator GetEnumerator()
{
ListNode node = firstNode;
while (node != null)
{
yield return node;
node = node.Next;
}
}
如果需要的话,现在可以让List
类实现IEnumerable
接口。
另一种选择是不使用foreach
循环,而是使用while循环,就像我在这里所做的,或者您在DisplayList
方法中所做的那样。