I just found something cool I haven’t been using in Linq so I thought I would share here.
When enumerating through a collection of IEnumerable, you can use the yeild statement to return items during runtime enumeration.
For example if I had a set of ShoppingCartItems held in an IEnumerable, and ShoppingCartItem has a Category, I could filter with an extension method like this:
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Web ;
namespace ShoppingCartExample
{
public interface IShoppingCartItem
{
string Description { get ; set ; }
double Cost { get ; set ; }
string Category { get ; set ; }
}
public static class Filters
{
public static IEnumerable < IShoppingCartItem > Filter ( this IEnumerable < IShoppingCartItem > instance , string Category )
{
foreach ( IShoppingCartItem item in instance )
{
if ( item . Category == Category )
{
yield return item ;
}
}
}
}
}
Example usage:
// declare a cart
List cart = new List ();
// add items
cart . Add ( new ShoppingCartItem () { Category = "Toys" , Cost = 1.23D , Description = "Monopoly" });
cart . Add ( new ShoppingCartItem () { Category = "Fruit" , Cost = 0.50D , Description = "Apple" });
// filter the items - not yet evaluated
IEnumerable results = Filters . Filter ( "Fruit" );
// all items will be yielded during enumeration here
int count = results . Count ; // will return 1
Related Content