我对代码有很多麻烦。我编译时出现以下错误:不懂IEnumerable <T>
“Ecommerce.DataHelpers.ProductNodeLoader”不实现接口成员“System.Collections.IEnumerable.GetEnumerator()”。 'Ecommerce.DataHelpers.ProductNodeLoader.GetEnumerator()'不能实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'。
林不知道如何解决这个问题,所以现在我不得不问你们!
CODE:
namespace Ecommerce.DataHelpers
{
public class ProductNodeLoader<T> : IEnumerable<T>
{
private ISqlHelper sqlHelper;
private IRecordsReader nodeReader;
public List<T> list = new List<T>();
// load all products from given company
public IEnumerator<T> GetEnumerator()
{
int companyId = 2;
try
{
sqlHelper = DataLayerHelper.CreateSqlHelper(GlobalSettings.DbDSN);
nodeReader = sqlHelper.ExecuteReader(@"
SELECT * FROM eCommerceNodes WHERE companyId = @companyId)
", sqlHelper.CreateParameter("@companyId", companyId));
}
catch (Exception e)
{
Log.Add(LogTypes.Custom, -1, e.InnerException.ToString());
yield break;
}
if (nodeReader.HasRecords)
{
while(nodeReader.Read())
{
ProductNode node = new ProductNode();
node.id = nodeReader.Get<int>("id");
node.parentId = nodeReader.Get<int>("parentId");
node.companyId = nodeReader.Get<int>("companyId");
node.path = nodeReader.Get<string>("path");
node.sortOrder = nodeReader.Get<string>("sortOrder");
node.text = nodeReader.Get<string>("text");
node.nodeType = nodeReader.Get<int>("nodeType");
list.Add(node);
}
nodeReader.Close();
}
else
{
throw new ApplicationException("No products to load");
}
return list;
}
}
}
我的坏编辑道歉!
我不敢试图在这里竞争,但值得注意的是,这不是他*唯一*的问题。在该方法内部有一个不允许的return语句,并且他返回了一个ProductNode的具体实例,其中泛型类型T是预期的。一般来说,他应该做**收益回报**,而不是将项目添加到列表中。 – Josh 2010-09-02 13:18:26
@Josh:编辑添加这些点和其他几个。 – 2010-09-02 13:25:09
谢谢大家的帮助! 我的第一个版本只包含“yield return node”。但在尝试了一切后,我可以想到我有点绝望=) 已经出现了一个新问题是这样的:为什么不能在try子句中使用yield命令? – Marthin 2010-09-02 14:36:40