我對代碼有很多麻煩。我編譯時出現以下錯誤:不懂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