Kann jemand ein einfaches Beispiel für die Verwendung des Schlüsselwortes foreach
mit benutzerdefinierten Objekten teilen?Wie foreach-Schlüsselwort für benutzerdefinierte Objekte in C verwenden können #
Antwort
Angesichts der Tags, ich nehme an, Sie meinen in .NET - und ich werde wählen, über C# zu sprechen, als das ist, was ich weiß.
Die foreach
Anweisung (normalerweise) verwendet IEnumerable
und IEnumerator
oder ihre generischen Verwandten. Eine Anweisung der Form:
foreach (Foo element in source)
{
// Body
}
wo source
IEnumerable<Foo>
implementiert ist grob äquivalent zu:
using (IEnumerator<Foo> iterator = source.GetEnumerator())
{
Foo element;
while (iterator.MoveNext())
{
element = iterator.Current;
// Body
}
}
beachte, dass die IEnumerator<Foo>
am Ende angeordnet ist, aber die Anweisung beendet. Dies ist wichtig für Iteratorblöcke.
Um IEnumerable<T>
oder IEnumerator<T>
selbst zu implementieren, ist der einfachste Weg, einen Iteratorblock zu verwenden. Anstatt alle Details hier zu schreiben, ist es wahrscheinlich am besten, Sie nur auf chapter 6 of C# in Depth zu verweisen, was ein kostenloser Download ist. Das ganze Kapitel 6 ist auf Iteratoren. Ich habe noch ein paar Artikel auf meiner C# in Depth-Website, auch:
Als kleines Beispiel wenn:
public IEnumerable<int> EvenNumbers0To10()
{
for (int i=0; i <= 10; i += 2)
{
yield return i;
}
}
// Later
foreach (int x in EvenNumbers0To10())
{
Console.WriteLine(x); // 0, 2, 4, 6, 8, 10
}
Zur Umsetzung IEnumerable<T>
für eine Geben Sie Folgendes ein:
public class Foo implements IEnumerable<string>
{
public IEnumerator<string> GetEnumerator()
{
yield return "x";
yield return "y";
}
// Explicit interface implementation for nongeneric interface
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator(); // Just return the generic version
}
}
Der direkte PDF-Link verweist wieder auf die Bemannungsseite - vielleicht wird das besser funktionieren: http://www.manning.com/skeet/ –
Danke sehr viel - jetzt reparieren. Das ist ein bisschen nervig :( –
(gehe ich davon aus C# hier)
Wenn Sie eine Liste der benutzerdefinierten Objekte, die Sie gerade die foreach auf die gleiche Art und Weise verwenden können, wie Sie mit einem anderen Objekt tun:
List<MyObject> myObjects = // something
foreach(MyObject myObject in myObjects)
{
// Do something nifty here
}
Wenn Sie möchten, Um Ihren eigenen Container zu erstellen, können Sie das Yield-Schlüsselwort (ab .Net 2.0 und höher, glaube ich) zusammen mit der IEnumerable-Schnittstelle verwenden.
class MyContainer : IEnumerable<int>
{
private int max = 0;
public MyContainer(int max)
{
this.max = max;
}
public IEnumerator<int> GetEnumerator()
{
for(int i = 0; i < max; ++i)
yield return i;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Und dann verwenden Sie es mit foreach:
MyContainer myContainer = new MyContainer(10);
foreach(int i in myContainer)
Console.WriteLine(i);
- 1. Können wir Transaktionen für C# -Objekte implementieren?
- 2. Ziel C überschreiben% @ für benutzerdefinierte Objekte
- 3. Wie können wir benutzerdefinierte Einstellungen für Sonar in Eclipse verwenden?
- 4. Wie verwenden Sie benutzerdefinierte Klassen in Ausdrücken wie mathematische Objekte?
- 5. Symfony2 benutzerdefinierte Anmerkungen für Objekte
- 6. Wie definieren Sie benutzerdefinierte Objekte in ActionScript?
- 7. Wie können Heap-Objekte Daten vom Stack verwenden?
- 8. C++: Referenzzähler für Objekte
- 9. C# -Wrapper für Objekte
- 10. Verwenden Datei wie Objekte für Tk(). Iconbitmap()
- 11. Wie mache ich benutzerdefinierte Objekte in Javascript?
- 12. Wie Python-Sammlungen für benutzerdefinierte Klassen verwenden
- 13. Speicherverwaltung/Caching für teure Objekte in C#
- 14. UIA-Aufruf-Proxy für benutzerdefinierte Objekte
- 15. Können wir benutzerdefinierte JSON-Daten für Kubismus verwenden?
- 16. Können Sie Objekte mit Variablen in C++ erstellen
- 17. Benutzerdefinierte XmlSerialization für verschachtelte/untergeordnete Objekte
- 18. Jackson benutzerdefinierte Deserialisierung für polymorphe Objekte
- 19. Persistente benutzerdefinierte Objekte
- 20. Standardwert in einer HashMap für eine benutzerdefinierte Klasse in C++
- 21. Komplexe Objekte in DataFlow verwenden
- 22. Aufruf benutzerdefinierte Objekte, deren Namen Zahlen in Objective-c
- 23. Sortieren NSArray benutzerdefinierte Objekte von einem anderen NSArray benutzerdefinierte Objekte
- 24. Fehlende Werte von Geordnete Menge in C++ 11 Benutzerdefinierte Objekte
- 25. Wie benutzerdefinierte IComparer für SortedDictionary verwenden?
- 26. Können Sie generische Formulare in C# verwenden?
- 27. Dateien können nicht benutzerdefinierte MapReduce jar in Cosmos verwenden
- 28. Objekte können nicht in Zeiger umgewandelt werden C++
- 29. Instanceof für Objekte in C++ (keine Zeiger)
- 30. Beibehalten von C++/CLI für .NET-Objekte in C-Bibliotheksaufrufen
Was genau ist die Frage? Wie verwende ich foreach mit einem benutzerdefinierten Objekt? Oder wie schreibe ich Code in das benutzerdefinierte Objekt, damit foreach darauf verwendet werden kann? –
wie man Code in das benutzerdefinierte Objekt schreibt, so dass foreach darauf verwendet werden kann – user42070