<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8004521102057505809</id><updated>2012-02-16T16:53:38.013-08:00</updated><title type='text'>Software Engineering in .NET</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetengineer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8004521102057505809/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetengineer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chris McKenzie</name><uri>http://www.blogger.com/profile/17124981891318963834</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8004521102057505809.post-8250517782590010826</id><published>2007-09-02T08:58:00.000-07:00</published><updated>2007-09-03T16:16:32.063-07:00</updated><title type='text'>Filtering Lists</title><content type='html'>&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;Something I've seen   done quite often in code-bases I've worked on is the addition of search   methods to inherited collections. The developer will add a FindByID() or   FindByCustomer() method to a list of purchase orders. While it is sometimes   feasible to perform these kinds of searches directly against the database,   there are advantages to embedding the search methods directly in container   collection itself. For instance, some applications are required to work in a   disconnected state. In a PDA application I worked on, the program had to run   disconnected from the SQL Server database, and used an XML file to store the   local data. The disk I/O was very slow however, and so I found it to be much   more performant to load all of the data in memory, then query the data at   runtime.&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;The drawback to these   kinds of query methods is that they are very limited in their functionality.   This is by design of course--you don't add a query method to a collection   unless you have need of it. Query methods usually start out very simple   anyway--"FindByCustomer()" is fairly straightforward. But what if you need   something a little more robust? Do you write   "FindByCustomerForDateRangeWhereOrdersArePendingAndAmountOwedGreaterThan()?"   What if the items in the list are in a different kind of collection--e.g.,   what if the purchase orders are stored in an ArrayList instead of your custom   collection that defines the query methods? You'll have to move the items to   the custom query-able collection prior to executing the run-time query. That   smells...&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;So I set as my   requirements that:&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;ul type="disc"&gt;   &lt;li class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;query mechanism     should be simple; preferably based on a single function. &lt;/font&gt;&lt;/span&gt;     &lt;li class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;       &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;query mechanism       should be highly flexible, supporting varied and multiple criteria with       ease. &lt;/font&gt;&lt;/span&gt;       &lt;li class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;         &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;query criteria         should be decoupled from the query operation. &lt;/font&gt;&lt;/span&gt;         &lt;li class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;           &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;query           operation should be useful on any kind of list&lt;/font&gt;&lt;/span&gt;         &lt;/li&gt; &lt;/ul&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;With these issues in   mind, I began working on a way to dynamically query a list without adding   query methods to the underlying collection, or even without caring what the   underlying collection is. My approach is of the form "given a list of items,   create a new list of items that match a certain criteria." I desired to   separate the criteria used to search the list from the operation of creating a   new list matching the criteria. The criteria code had to be robust enough to   handle multiple criteria.&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;I started with an   interface called IMatch. IMatch has a single function--IsMatch--that returns a   boolean indicating a successful or failed match. With this interface, you can   create multiple concrete matching criteria without caring what the criteria   are.&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:11.5pt; COLOR:#333333; FONT-FAMILY:'Trebuchet MS'"&gt;&lt;/span&gt;&amp;nbsp; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Determines if one item matches another.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;typeparam     name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Collaborates with ListFilter for purposes of filtering target&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     data from lists.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;interface&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt; True if     the item matches the criteria, otherwise False.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; IsMatch(T value);&lt;/span&gt;   &lt;/p&gt;   &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&amp;nbsp;&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;For   testing purposes, I decided to use a simple regular expression matching   criteria. First, the unit test:&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;[Test]&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;void&lt;/span&gt; RegularExpressionMatchTest()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;     match = &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"^Smith"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; result =     match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Smith, Mr."&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;result = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Star     Wars"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" dir="ltr" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsFalse(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p dir="ltr" style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;&lt;font size="3"&gt;The   Regular Expression "^Smith" should match "Smith, Mr.", but not "Star Wars."   The implementation of RegularExpressionMatch is as follows:&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Implements     IMatch&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;String&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;     using a regular expression.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;class&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt; :     &lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;private&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt; _Expression;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt; Gets or     Sets the expression being matched.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt; Expression&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;get&lt;/span&gt; {     &lt;span style="COLOR:blue"&gt;return&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Expression; }&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;set&lt;/span&gt; {     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Expression =     &lt;span style="COLOR:blue"&gt;value&lt;/span&gt;; }&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#region&lt;/span&gt;&lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;     IMatch&amp;lt;string&amp;gt; Members&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Implementation if IMatch.IsMatch.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;true     if the expression matches the value, otherwise     false.&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;bool&lt;/span&gt;     IsMatch(&lt;span style="COLOR:blue"&gt;string&lt;/span&gt; value)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;return&lt;/span&gt;     System.Text.RegularExpressions.&lt;span style="COLOR:#2b91af"&gt;Regex&lt;/span&gt;.IsMatch(value,     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;.Expression);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#endregion&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Constructor: store the expression.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="expression"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     RegularExpressionMatch(&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;     expression)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Expression = expression;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;At this   point, two of my requirements are met: the query mechanism is simple, and the   criteria is decoupled from the filtering operation. Indeed, at this point I   have not written the filtering operation. Let's fix that. First, the unit   test:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;[Test]&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;void&lt;/span&gt; MatchSimpleExpression()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;     match = &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"^Jones"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&amp;nbsp;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;     list = &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;list.Add(&lt;span style="COLOR:#a31515"&gt;"Anderson,     Larry"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;list.Add(&lt;span style="COLOR:#a31515"&gt;"Black, John"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;list.Add(&lt;span style="COLOR:#a31515"&gt;"Jones, Tom"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;list.Add(&lt;span style="COLOR:#a31515"&gt;"Jones, Steven"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;list.Add(&lt;span style="COLOR:#a31515"&gt;"Zachary, James"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="BACKGROUND:yellow; COLOR:#2b91af"&gt;IList&lt;/span&gt;&lt;span style="BACKGROUND:yellow"&gt;&amp;lt;&lt;span style="COLOR:blue"&gt;string&lt;/span&gt;&amp;gt;     results =     &lt;span style="COLOR:#2b91af"&gt;ListFilter&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;.GetFilteredList(list,     match);&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.AreEqual(2,     results.Count);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="COLOR:#a31515"&gt;"Jones,     Tom"&lt;/span&gt;, results[0]);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="COLOR:#a31515"&gt;"Jones,     Steven"&lt;/span&gt;, results[1]);&lt;/span&gt;   &lt;/p&gt;   &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;According   to the unit test, we should be able to use a RegularExpressionMatch to filter   a list of strings for items that match the regular expression. The actual   filtering takes place on the highlighted line. The GetFilteredList is fed a   source list that it will filter according to the matching criteria. The   implementation should be very   simple:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Filters a list of items of T using a specified filter of T.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;typeparam     name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;class&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;ListFilter&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt; Returns     a list of T matching the specified criteria.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="source"&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;The list being     filtered.&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="criteria"&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;An IMatch interface that     performs the&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     matching     criteria.&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;static&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IList&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;GetFilteredList(&lt;span style="COLOR:#2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt;     source, &lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt; criteria)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; results =     &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:green"&gt;// add matching items to the results     list.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;foreach&lt;/span&gt;(T item     &lt;span style="COLOR:blue"&gt;in&lt;/span&gt; source)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;if&lt;/span&gt; (criteria.IsMatch(item)) &lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results.Add(item);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;return&lt;/span&gt; results;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt; prevent     the ListFilter class from being instantiated.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;private&lt;/span&gt; ListFilter()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;As you   can see, GetFilteredList simply creates a result set and adds items from the   source list that match the criteria to the result set. By defining the source   list as IEnumerable, we ensure that we can use any kind of list as a source.   &lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;At this   point, we are left with one requirement: what about complicated queries? How   do we execute a query such as   "FindByCustomerForDateRangeWhereOrdersArePendingAndAmountOwedGreaterThan()?"&amp;nbsp;   I could argue that the preceding query could be achieved by making repeated   calls to GetFilteredList() using the IMatch class for each criteria being   sought. However, that method suffers from two defects: 1) it is annoying; 2)   it doesn't handle complex "or" criteria. For example, what if I want to   include items that meet any one of many criteria in my search? It sounds like   what we need is a CompositeMatch; specifically, a CompositeAndMatch, and a   CompositeOrMatch. Let's do the CompositeAndMatch first. Here's the   test:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;[Test]&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;void&lt;/span&gt; CompositeAndFilterTest()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;CompositeAndMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;     match = &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;CompositeAndMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"arbitrary     string"&lt;/span&gt;)); &lt;span style="COLOR:green"&gt;// and match without criteria     should be true.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:green; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;match.Matches.Add(&lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"^Smith"&lt;/span&gt;));&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;match.Matches.Add(&lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"John"&lt;/span&gt;));&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; result =     match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Smith, John A."&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;result = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Smith,     Albus"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsFalse(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;result     = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Black, John"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsFalse(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;The   CompositeAndMatch matches the first string because it contains both "Smith"   and "John", but fails to match "Smith, Albus" because it does not contain   "John", and fails to match "Black, John" because it does not contain "Smith."   Here's the   implementation:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     IMatch class that contains multiple IMatch instances. Matches if and     &lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     only if all of the contained IMatch instances are true.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;typeparam     name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;class&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;CompositeAndMatch&lt;/span&gt;&amp;lt;T&amp;gt; :     &lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;private&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;     _Matches;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Container for other IMatch instances.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;     Matches&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;get&lt;/span&gt; {     &lt;span style="COLOR:blue"&gt;return&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Matches; }&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#region&lt;/span&gt;&lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;     IMatch&amp;lt;T&amp;gt; Members&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Implementation of IMatch.IsMatch()&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;true     if all contained IMatch instances are true, otherwise     false.&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; IsMatch(T value)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; result =     &lt;span style="COLOR:blue"&gt;true&lt;/span&gt;;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;foreach&lt;/span&gt;     (&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt; item     &lt;span style="COLOR:blue"&gt;in&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;.Matches)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;if&lt;/span&gt; (!item.IsMatch(value))&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;result = &lt;span style="COLOR:blue"&gt;false&lt;/span&gt;;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;break&lt;/span&gt;;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;return&lt;/span&gt; result;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#endregion&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt; CompositeAndMatch()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Matches =     &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&amp;nbsp;&lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;The   CompositeOrMatch is similar, except that it should return true if any of the   contained matches are   true:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;[&lt;/span&gt;Test]&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;void&lt;/span&gt; CompositeOrFilterTest()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;CompositeOrMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;     match = &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;CompositeOrMatch&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;String&lt;/span&gt;&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"arbitrary     string"&lt;/span&gt;)); &lt;span style="COLOR:green"&gt;// or match without criteria     should be true.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:green; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;match.Matches.Add(&lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"^Smith"&lt;/span&gt;));&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;match.Matches.Add(&lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;RegularExpressionMatch&lt;/span&gt;(&lt;span style="COLOR:#a31515"&gt;"John"&lt;/span&gt;));&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; result =     match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Smith, John A."&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;result = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Smith,     Albus"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;result     = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Black, John"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsTrue(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;result = match.IsMatch(&lt;span style="COLOR:#a31515"&gt;"Potter,     Harry"&lt;/span&gt;);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:#2b91af"&gt;Assert&lt;/span&gt;.IsFalse(result);&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&amp;nbsp;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;The   matcher should return true for "Smith, John A.", "Smith, Albus", and "Black,   John"; but "Potter, Harry" contains neither "Smith" nor "John" so we should   not get a match there. Here is the   implementation:&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT:0px"&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     IMatch class that contains multiple IMatch instances. Matches if any one     &lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     of the contained IMatch instances is true.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;typeparam     name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;class&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;CompositeOrMatch&lt;/span&gt;&amp;lt;T&amp;gt; :     &lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;private&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;     _Matches;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Container for the other IMatch instances.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;IList&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;     Matches&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;get&lt;/span&gt; {     &lt;span style="COLOR:blue"&gt;return&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Matches; }&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#region&lt;/span&gt;&lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;     IMatch&amp;lt;T&amp;gt; Members&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     Implementation for IMatch.IsMatch()&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;param     name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;///&lt;/span&gt;&lt;span style="COLOR:green"&gt;     &lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green"&gt;true     if any of the contained IMatch instances are true, otherwise     false.&lt;/span&gt;&lt;span style="COLOR:gray"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; IsMatch(T value)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:green"&gt;// result should be initialized to true if     there are no criteria&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:green"&gt;// otherwise false.&lt;/span&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;bool&lt;/span&gt; result =     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;.Matches.Count == 0; &lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&amp;nbsp;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;foreach&lt;/span&gt;     (&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt; item     &lt;span style="COLOR:blue"&gt;in&lt;/span&gt;     &lt;span style="COLOR:blue"&gt;this&lt;/span&gt;.Matches)&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;if&lt;/span&gt; (item.IsMatch(value))&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;result     = &lt;span style="COLOR:blue"&gt;true&lt;/span&gt;;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;break&lt;/span&gt;;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;return&lt;/span&gt; result;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;#endregion&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; COLOR:blue; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;public&lt;/span&gt; CompositeOrMatch()&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;{&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;&lt;span style="COLOR:blue"&gt;this&lt;/span&gt;._Matches =     &lt;span style="COLOR:blue"&gt;new&lt;/span&gt;     &lt;span style="COLOR:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af"&gt;IMatch&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;();&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;     &lt;/span&gt;}&lt;/span&gt;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&amp;nbsp;   &lt;/p&gt;   &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;     &lt;span style="FONT-SIZE:10pt; FONT-FAMILY:'Courier New'"&gt;}&lt;/span&gt;   &lt;/p&gt; &lt;/blockquote&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;span style="FONT-SIZE:10pt; COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN:0in 0in 0pt; LINE-HEIGHT:18pt"&gt;   &lt;font size="3"&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Trebuchet MS'"&gt;Now,   since the CompositeAndMatch and CompositeOrMatch classes both implement   IMatch, they each CompositeMatch class can itself be used as a component of   another composite match. Thus, if you have a query such that   ComplicatedMessOfCriteriaMustBeTrueA or ComplicatedMessOfCriteriaMustBeTrueB,   you could wrap the complicated mess of criteria for both A and B in   CompositeAndFilters, then add each of the CompositeAndFilters to a master   CompositeOrFilter. At this point, you can filter the entire list on all of the   criteria with a single call to GetFilteredList(). Thus, our final requirement   of being able to solve complex queries is now met.   Enjoy!&lt;/span&gt;&lt;span style="COLOR:black; FONT-FAMILY:'Courier New'"&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt"&gt;   &lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8004521102057505809-8250517782590010826?l=dotnetengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetengineer.blogspot.com/feeds/8250517782590010826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8004521102057505809&amp;postID=8250517782590010826' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8004521102057505809/posts/default/8250517782590010826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8004521102057505809/posts/default/8250517782590010826'/><link rel='alternate' type='text/html' href='http://dotnetengineer.blogspot.com/2007/09/filtering-lists.html' title='Filtering Lists'/><author><name>Chris McKenzie</name><uri>http://www.blogger.com/profile/17124981891318963834</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
