Zuerst sicherstellen, dass Sie using System.Linq;
an der Spitze der Datei haben.
Wenn Sie eine Sammlung, die IEnumerable
implementiert, aber nicht IEnumerable<T>
, aber Sie kennen die Objekte sind alle eines bestimmten Typs (wie Control
), dann können Sie die Cast<T>
LINQ Extension-Methode verwenden:
foreach (var control in Controls.Cast<Control>()
.Where(i => i.GetType() == typeof(TextBox))) {...}
Doch angesichts Ihrer Where
Klausel, könnte es sinnvoll sein, in diesem Fall zu verwenden, um die OfType<T>
Verfahren, das nur diejenigen eines bestimmten Typs zurückgibt (Cast<T>
löst eine Ausnahme aus, wenn etwas falsch ist):
foreach (var control in Controls.OfType<TextBox>()) {...}
Der kleine Unterschied zwischen dieser und Ihrer Version besteht darin, dass die oben genannten Unterklassen TextBox
zurückgeben, wo Ihre GetType() == typeof(TextBox)
Version nicht. Grundsätzlich
, die meisten der LINQ Erweiterungsmethoden definiert sind, nur für IEnumerable<T>
/IQueryable<T>
, nicht IEnumerable
/IQueryable
.
Danke. Ich habe tatsächlich versucht, in einem Beispiel "wo" zu verwenden, um von OfType zu unterscheiden, um nur exakte Typen zu erhalten, nicht alle zuweisbaren Typen. Die Besetzung funktioniert gut. –
ProfK