Saturday, 26 September 2015

Writing Custom LINQ Extension Methods



LINQ extension methods can be applied to any type provided that the source is of type IEnumerable<T>, so thats really the only requirement.
So how do we write an extension method? Well it’s quite simple. Here are 2 that I’ve written for an IEnumerable<string> the first example takes a Predicate and the second one doesn’t. This extension method will check whether a file name string is a valid image file, but you can do it for whatever your purpose is.
public static IEnumerable<string> IsImageFile(this IEnumerable<string> files, Predicate<string> isMatch)
{
foreach (string file in files)
       {
              if (isMatch(file))
                    yield return file;
       }
}

public static IEnumerable<string> IsImageFile(this IEnumerable<string> files)
{
foreach (string file in files)
       {
              if (file.Contains(".jpg") || file.Contains(".png") || file.Contains(".bmp"))
                    yield return file;
       }
}

The only other thing to note is the cryptic “this” keyword used in the method signature. This means it’s being applied to the current IEnumerable<T> collection. Just always put it in your extension methods and you’ll be fine.
So how to use these extension methods, well providing your dealing with a  Enumerable<string> collection you’ll get the option coming up as an extension method.


And to actually use it you could use a standard LINQ query something like



No comments:

Post a Comment