La implementación de LINQ simplemente significa la aplicación de los métodos de LINQ espera estar allí, como Where
o Select
, con las firmas correctas. A pesar de la percepción común, no es necesario implementar la interfaz IEnumerable
para su clase para admitir LINQ. Sin embargo, implementando IEnumerable
automáticamente obtendrá el conjunto completo de métodos LINQ en la clase Enumerable
casi gratis - usted solo tiene que implementar GetEnumerator
y una clase IEnumerator
.
Hay un par de ejemplos sobre cómo implementar IEnumerable
en mi blog, en esta publicación acerca de the Iterator pattern.
Sin embargo, si no tiene sentido que su clase sea enumerable, no es necesario que lo haga. Solo necesita implementar los métodos LINQ apropiados directamente. A LINQ no le importa cómo se definan los métodos, siempre que compile C#. Es decir, si se escribe:
from p in myPlist where p.Thing == "Thing" select p;
el compilador de C# esto se traduce en:
mpPlist.Where(p => p.Thing == "Thing").Select(p => p);
Mientras que recopila, LINQ funcionará. Para ver las firmas correctas para los métodos, busque como la documentación de MSDN list of LINQ query methods. Por ejemplo (se supone que su PList
era una lista de PListItem
s):
public class PList
{
public IEnumerable<PListItem> Where(Func<PListItem, bool> predicate)
{
foreach (var item in this.items)
{
if (predicate(item))
{
yield return item;
}
}
}
}
bien la aplicación de LINQ directamente de esta manera le da mucho más control sobre cómo se comporta, es un mucho trabajo más para conseguirlo correcto, y necesita comprender las implicaciones de sus valores devueltos, y encadenar llamadas LINQ, etc. En general, si puede salirse con la suya implementando IEnumerable
y dejar que C# haga todo el trabajo por usted, las cosas son mucho más fáciles.
por cierto, buena publicación en el blog! –