<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://zine.net.pl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Wyrażenia lambda w praktyce - MethodWrappers</title><link>http://zine.net.pl/blogs/procent/archive/2008/11/12/wyra-enia-lambda-w-praktyce-methodwrappers.aspx</link><description>Kiedyś już wspominałem o fajnym wykorzystaniu wyrażeń lambda w poście Wyrażenia lambda i extension methods - aspektejszyn . Dzisiaj przytoczę kolejne przykłady takiego ich zastosowania, które potrafią znacząco ograniczyć ilość powtarzalnego kodu w kodzie</description><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>re: Wyrażenia lambda w praktyce - MethodWrappers</title><link>http://zine.net.pl/blogs/procent/archive/2008/11/12/wyra-enia-lambda-w-praktyce-methodwrappers.aspx#2389</link><pubDate>Wed, 12 Nov 2008 22:01:19 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2389</guid><dc:creator>Wojciech Gebczyk</dc:creator><description>&lt;p&gt;Tak patrze i zaraz kojarzy mi sie pasqdne &amp;quot;On Error Resume Next&amp;quot;. Brrr...&lt;/p&gt;
&lt;p&gt;;-)&lt;/p&gt;
</description></item><item><title>re: Wyrażenia lambda w praktyce - MethodWrappers</title><link>http://zine.net.pl/blogs/procent/archive/2008/11/12/wyra-enia-lambda-w-praktyce-methodwrappers.aspx#2390</link><pubDate>Thu, 13 Nov 2008 09:56:07 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2390</guid><dc:creator>Hellix</dc:creator><description>&lt;p&gt;Pro przykłady. :) Przyzwyczajenia do lambd są w dalszej perspektywie czymś co naprawdę może wyjść każdemu na dobre. ;)&lt;/p&gt;
</description></item><item><title>. jak .NET by Maciej Aniserowicz : Wyrażenia lambda w praktyce - MethodWrappers</title><link>http://zine.net.pl/blogs/procent/archive/2008/11/12/wyra-enia-lambda-w-praktyce-methodwrappers.aspx#3374</link><pubDate>Sat, 18 Apr 2009 08:15:49 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:3374</guid><dc:creator>dotnetomaniak.pl</dc:creator><description>&lt;p&gt;Dziękujemy za publikację - Trackback z dotnetomaniak.pl&lt;/p&gt;
</description></item><item><title>re: Wyrażenia lambda w praktyce - MethodWrappers</title><link>http://zine.net.pl/blogs/procent/archive/2008/11/12/wyra-enia-lambda-w-praktyce-methodwrappers.aspx#3381</link><pubDate>Sat, 18 Apr 2009 23:19:40 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:3381</guid><dc:creator>WooBoo</dc:creator><description>&lt;p&gt;Maćku, &lt;/p&gt;
&lt;p&gt;W Twoich pierwszych dw&amp;#243;ch przykładach nie widzę zastosowania lambda expressions. Używasz prostych delegat&amp;#243;w (choć lambda to po prostu anonimowe delegaty w innym zapisie). Używając trochę generycznych typ&amp;#243;w i extension methods przykład m&amp;#243;głby wyglądać ciekawiej i być bardziej przydatny (np. przyjmować parametry i może coś zwracać):&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;public static class MethodHelpers&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public static void IgnoreExceptions&amp;lt;T&amp;gt;(this T subject, params Action&amp;lt;T&amp;gt;[] actions)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;foreach (var action in actions)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;action.Invoke(subject);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch(Exception ex)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//log, show message box, do whatever you like&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public static R IgnoreExceptions&amp;lt;T, R&amp;gt;(this T subject, Func&amp;lt;T, R&amp;gt; action)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return action.Invoke(subject);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//log, show message box, do whatever you like&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return default(R);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;a użycie:&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SomeClass sc = new SomeClass();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string param = &amp;quot;WooBoo&amp;quot;;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sc.IgnoreExceptions(o =&amp;gt; o.DoSomething(param+&amp;quot;1&amp;quot;)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;,o =&amp;gt; o.DoSomething(param+&amp;quot;2&amp;quot;)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;,o =&amp;gt; o.DoSomething(param+&amp;quot;3&amp;quot;)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;,o =&amp;gt; o.DoSomething(param+&amp;quot;4&amp;quot;)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;,o =&amp;gt; o.DoSomething(param+&amp;quot;5&amp;quot;));&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;string result = sc.IgnoreExceptions(o =&amp;gt; o.SaySomething(param));&lt;/p&gt;
&lt;p&gt;Zastanawiam się czy bawiąc się klasą Expression&amp;lt;T&amp;gt; nie dało by się wyodrębnić i opakować w try/cach wszystkich wywołań z czegoś takiego:&lt;/p&gt;
&lt;p&gt;sc.IgnoreException(o=&amp;gt;{&lt;/p&gt;
&lt;p&gt;o.DoSomething(param+&amp;quot;1&amp;quot;);&lt;/p&gt;
&lt;p&gt;o.DoSomething(param+&amp;quot;2&amp;quot;);&lt;/p&gt;
&lt;p&gt;o.DoSomething(param+&amp;quot;3&amp;quot;);&lt;/p&gt;
&lt;p&gt;}); &lt;/p&gt;
</description></item></channel></rss>