die foreach-Anweisung funktioniert nicht auf Variablen vom Typ Dars enthält keine öffentliche definition für "GetEnumerator'
Habe ich eine Liste, Dars
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PantaRei.Components
{
public class Dars
{
public float OpBal { get; set; }
public float PlNeOrRec { get; set; }
public float MiCaCol { get; set; }
public float MiDeCol { get; set; }
public float MiWrOff { get; set; }
public float ClBal { get; set; }
public float Tot
{
get { return OpBal+ PlNeOrRec+ MiCaCol + MiDeCol + MiWrOff; }
}
}
}
Erstelle ich einen neuen dars
Dars secA1 = new Dars();
Und Dann benutze ich dieses bit des Codes, um es zu füllen
public static void GetData(ref Dars secA1, Ddr ddr, Ddrs ddrs, Type pTypes)
{
Array typesEnum = Enum.GetValues(pTypes);
foreach (Enum types in typesEnum)
{
string pType = StringEnum.GetStringValue(types);
secA1.OpBal = ddrs.Out.Sum(o => o.Amount);
secA1.MiDeCol += ddr.Dil.Where(dil => dil.ProductType == pType && dil.ToBeSold).Sum(dil => dil.Amount);
secA1.PlNeOrRec += ddr.Rec.Where(rec => rec.ToBeSold).Sum(rec => rec.Amount);
GetMiCaCol(ref secA1, ddr, pType);
GetMiWrOff(ref secA1, ddr, pType);
}
}
Nun würde ich gerne etwas wie das hier tun
int i = 11;
foreach (float g in secA1)
{
daily.Cells[i, 4] = g;
i++;
}
Aber ich bin immer diese Fehlermeldung
foreach-Anweisung funktionieren nicht auf Variablen vom Typ 'PantaRei.Komponenten.Dars' weil 'PantaRei.Komponenten.Dars "enthält keine öffentliche definition für "GetEnumerator'
Wie löse ich dieses?
- Ehrlich gesagt würde ich lösen, indem Sie nicht versuchen, foreach über etwas, das eindeutig nicht eine Sammlung
- Ok, wie kann ich drehen Sie es in eine Sammlung?
- aber... aber... Es ist nicht eine Sammlung..., die Vorgibt iy ist, wäre sehr untypisch
InformationsquelleAutor Rui Martins | 2012-08-23
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur weil eine Klasse eine Sammlung von Eigenschaften, die zufällig
float
s, es heißt nicht, dass es eine Sammlung. Dein code scheint zu tun, was getan werden würde, viel mehr angemessen, mit einer Art von Datenbindung. Was Sie versuchen zu tun kann werden, erfolgt durch MarkierungDars
Umsetzung derIEnumerable
- Schnittstelle und das hinzufügen einer Umsetzung derGetEnumerator
Methode gibt die Werte für die float-Eigenschaften in der Klasse, aber ich würde nie dulden, diesen Ansatz in einen code-review. Dass gesagt wird, die versuchen, diese (wenn Sie müssen):Es ist nicht ganz klar, was Sie zu tun versuchen, aber Sie könnte wollen einfach implementieren Sie eine Methode die eine
IEnumerable<float>
mit einem iterator block:... oder Sie können eine
List<float>
oder einefloat[]
und Rendite, die von der Methode statt:Sollte man natürlich einstellen, damit, wenn das ist nicht, was Sie wollen.
(Nebenbei, die sind ziemlich grauenvoll Namen der Eigenschaft. Sind Sie wirklich das, was dein code macht?)