C#で構築しているWindowsフォームアプリケーションに問題があります。エラーは、「「CarBootSale.CarBootSaleList」には「GetEnumerator」のパブリック定義が含まれていないため、foreachステートメントは「CarBootSale.CarBootSaleList」タイプの変数を操作できない」と述べています。
何がこれを引き起こしているのか理解できないようです。
これはエラーを投げているコードです:
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
クラスはリストではありません。リストを含むクラスです。
次の3つのオプションがあります。
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();
}
}
CarBootSaleListの代わりにforeachループで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
リストをネストしているように、コードも少し奇妙に見えますか?