![](/img/trans.png)
[英]Foreach statement does not contain public definition for GetEnumerator on C#
[英]C# Foreach statement does not contain public definition for GetEnumerator
我在使用 C# 構建的 Windows 窗體應用程序時遇到問題。 錯誤指出“foreach 語句不能對類型為‘CarBootSale.CarBootSaleList’的變量進行操作,因為‘CarBootSale.CarBootSaleList’不包含‘GetEnumerator’的公共定義”。
我似乎無法理解是什么導致了這種情況。
這是引發錯誤的代碼:
List<CarBootSaleList> Sortcarboot = new List<CarBootSaleList>();
foreach (CarBootSale c in carBootSaleList)
{
if (c.Charity == "N/A")
{
Sortcarboot.Add(carBootSaleList);
textReportGenerator.GenerateAllReport(Sortcarboot, AppData.CHARITY);
}
}
這是 CarBootSaleList 類,它說沒有 GetEnumerator 定義:
public class CarBootSaleList
{
private List<CarBootSale> carbootsales;
public CarBootSaleList()
{
carbootsales = new List<CarBootSale>();
}
public bool AddCarBootSale(CarBootSale carbootsale)
{
bool success = true;
foreach (CarBootSale cbs in carbootsales)
{
if (cbs.ID == carbootsale.ID)
{
success = false;
}
}
if (success)
{
carbootsales.Add(carbootsale);
}
return success;
}
public void DeleteCarBootSale(CarBootSale carbootsale)
{
carbootsales.Remove(carbootsale);
}
public int GetListSize()
{
return carbootsales.Count();
}
public List<CarBootSale> ReturnList()
{
return carbootsales;
}
public string Display()
{
string msg = "";
foreach (CarBootSale cbs in carbootsales)
{
msg += String.Format("{0} {1}", cbs.ID, cbs.Location, cbs.Date);
msg += Environment.NewLine;
}
return msg;
}
您的CarBootSaleList
類不是列表。 它是一個包含列表的類。
您有三個選擇:
使您的CarBootSaleList
對象實現IEnumerable
要么
使您的 CarBootSaleList 從List<CarBootSale>
繼承
要么
如果你很懶,這幾乎可以做同樣的事情而無需額外的編碼
List<List<CarBootSale>>
您沒有向我們展示carBootSaleList
的聲明。 但是,從異常消息中我可以看到它的類型為CarBootSaleList
。 此類型不實現IEnumerable
接口,因此不能在 foreach 中使用。
您的CarBootSaleList
類應該實現IEnumerable<CarBootSale>
:
public class CarBootSaleList : IEnumerable<CarBootSale>
{
private List<CarBootSale> carbootsales;
...
public IEnumerator<CarBootSale> GetEnumerator()
{
return carbootsales.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return carbootsales.GetEnumerator();
}
}
在foreach
循環而不是carBootSaleList
使用carBootSaleList.data
。
您可能不再需要答案,但它可以幫助某人。
您應該實現 IEnumerable 接口(CarBootSaleList 應該在您的情況下實現它)。
http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator.aspx
但通常更容易繼承 System.Collections.ObjectModel.Collection 和朋友
http://msdn.microsoft.com/en-us/library/system.collections.objectmodel.aspx
您的代碼似乎也有點奇怪,就像您在嵌套列表一樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.