<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkAHQ3Y9cSp7ImA9WxBbGE4.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900</id><updated>2010-03-17T16:12:12.869+01:00</updated><title>öt perc dotnet</title><subtitle type="html">put your slogan {here}</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://otperc.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://otperc.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/OtPercDotnet" /><feedburner:info uri="otpercdotnet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkAHQ3Y8fSp7ImA9WxBbGE4.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-4784909295707102887</id><published>2010-03-17T16:09:00.003+01:00</published><updated>2010-03-17T16:12:12.875+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-17T16:12:12.875+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Base Class Library" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>SqlSmallDateTime.MaxValue? SqlDateTime.SmallMaxValue?</title><content type="html">&lt;p&gt;
A .NET CLR és az SQL Server dátumok tárolására képes adattípusainak értékkészlete nem egyezik meg. "Normál" esetben - mondjuk ha az elmúlt 50 évtől a következő 50 évig terjedő időintervallumba eső dátumokkal dolgozunk -, ez nem sok vizet zavar, a konverzió is legtöbbször automatikus, észre sem veszük. Néhány esetben azonban, például ha nagyon finom granulációra, vagy ennél távolabbi dátumok kezeléséra van szükségünk, könnyen problémákba ütközhetünk.
&lt;/p&gt;
&lt;p&gt;
Így járhatunk például, ha valami valamilyen speciális esetet valamilyen kitűntetett dátummal szeretnénk jelezni - pl. ha meg kell mondanunk, hogy egy adat mikortól érvényes, de vannak olyan adataink amik mindig is érvényesek voltak a múltban, a DataTime.MinValue ideális választás. Legalábbis addig, amíg nem szeretnénk ezt le is tárolni, az SQL Server &lt;a href="http://technet.microsoft.com/en-us/library/ms187819.aspx"&gt;&lt;tt&gt;datetime&lt;/tt&gt;&lt;/a&gt; típusa ugyanis csak 1753 január 1. utáni dátumokat képes kezelni (hogy miért, &lt;a href="http://otperc.net/2010/01/miert-pont-1753-01-01.html"&gt;arról már korábban írtam&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Szerencsére erre is van megoldás, a &lt;tt&gt;System.Data.SqlTypes&lt;/tt&gt; névtér alatt lakó SqlDateTime osztály (pontosabban &lt;tt&gt;struct&lt;/tt&gt;) személyében (az alábbi kód 1753. január 1., 00:00:00-át, illetve 9999. december 31., 23:59:59-et ír ki a konzolra):

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
Console.WriteLine(SqlDateTime.MinValue.Value);
Console.WriteLine(SqlDateTime.MaxValue.Value);&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Most azonban megállt a tudomány: az adatbázisban egy &lt;a href="http://msdn.microsoft.com/en-us/library/ms182418.aspx"&gt;&lt;tt&gt;smalldatetime&lt;/tt&gt;&lt;/a&gt;-ként reprezentált értéket kéne hasonlóképp kezelnem (az adott szituációban sokat számít, hogy a smalldatetime csak 4 byteot foglal a datetime 8-ával szemben). Az &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.sqltypes.aspx"&gt;msdn azt mondja&lt;/a&gt;, hogy a smalldatetime típust is, akárcsak a datetime-ot, az SqlDateTime osztály kezeli. Rajta azonban nincs olyan property, ami a smalldatetime Min- és MaxValue-ját adná vissza.&lt;br /&gt;
Tud valaki ilyenről?
&lt;/p&gt;
&lt;p&gt;
A probléma persze nem kritikus, nem túl megerőltető egy hasonló funkcionalitás "kézzel" való legyártása, csak még se olyan elegáns (viszont jó téma egy blogposzthoz).&lt;br /&gt;
Jó tudni továbbá (bár nekem most jelen esetben szintén nem opció), hogy az SQL Server 2008 &lt;a href="http://www.simple-talk.com/sql/learn-sql-server/sql-server-2008-the-new-data-types/"&gt;számos új adattípust&lt;/a&gt; vezetett be, köztük az időkezeléssel kapcsolatos &lt;tt&gt;date, time, datetime2, datetimeoffset&lt;/tt&gt; típusokat - ha új projektbe kezdünk, és van szerencsénk az újabb platformot használni, érdemes egy pillantást vetni rájuk.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-4784909295707102887?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/POLdb8kBFfg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/4784909295707102887/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/03/sqlsmalldatetimemaxvalue.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4784909295707102887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4784909295707102887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/POLdb8kBFfg/sqlsmalldatetimemaxvalue.html" title="SqlSmallDateTime.MaxValue? SqlDateTime.SmallMaxValue?" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/03/sqlsmalldatetimemaxvalue.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABSHc4fSp7ImA9WxBbF0g.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-4519783345859561404</id><published>2010-03-16T17:58:00.009+01:00</published><updated>2010-03-16T18:15:59.935+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T18:15:59.935+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="project management" /><title>Outlook Folder Home Pages and Web Views</title><content type="html">&lt;p&gt;
Az Outlook-ban lehetőségünk van minden Folderhez egy Home Page-et rendelni, ami lehet akár helyi HTML file, akár valamilyen webcím. Ez esetben a folderre kattintva a Home Page fog megjelenni ott, ahol normál esetben a folderben lévő leveleink jelennének meg.

Egy statikus lapot persze nem sok értelme van Home Page-ként beállítani, de létrehozhatunk például egy üres foldert kedvenc projektünknek, a projekt SharePoint szájtját pedig beállíthatjuk home page-nek, így mintegy "beemelve" az Outlookba azt:
&lt;/p&gt;

&lt;p&gt;
&lt;img style="margin: 0pt 10px 10px 0pt; width: 500px; height: 354px;" src="http://ptgmedia.pearsoncmg.com/images/chap3_0789729563/elementLinks/03fig35.jpg" alt="" border="0" /&gt;
&lt;/p&gt;

&lt;p&gt;
De nem csak ilyen egyszerű "ablak a külvilágra" mappákat hozhatunk létre: minimális HTML tudással (és erős copy&amp;amp;paste ismeretekkel) létrehozhatunk olyan helyi HTML fájlokat, amikben az Outlookkal együtt települő ActiveX kontrollok segítségével testre szabható Exchange funkcionalitást emelhetünk be a folderünk kezdőlapjába (mindemellett természetesen a "normál" HTML markupban is kedvünkre bűvészkedhetünk):
&lt;/p&gt;
&lt;p&gt;
&lt;img style="margin: 0px auto 10px; text-align: center; width: 500px; height: 426px;" src="http://ptgmedia.pearsoncmg.com/images/chap3_9780789736062/elementLinks/03fig39.jpg" alt="" border="0" /&gt;
&lt;/p&gt;
&lt;p&gt;
Az InformIT cikke: &lt;a href="http://www.informit.com/articles/article.aspx?p=691087&amp;amp;seqNum=7"&gt;Folder Home Pages and Web Views&lt;/a&gt;. Ügyes.
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-4519783345859561404?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/MMowFqBcZKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/4519783345859561404/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/03/outlook-folder-home-pages-and-web-views.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4519783345859561404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4519783345859561404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/MMowFqBcZKQ/outlook-folder-home-pages-and-web-views.html" title="Outlook Folder Home Pages and Web Views" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/03/outlook-folder-home-pages-and-web-views.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQESXo-fip7ImA9WxBbEkg.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-858062266129351226</id><published>2010-03-10T22:33:00.004+01:00</published><updated>2010-03-10T22:41:48.456+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-10T22:41:48.456+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="állásajánlat" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>MS-SQL developer wanted</title><content type="html">&lt;p&gt;
Ez úton is köszönöm mindenkinek, aki jelentkezett &lt;a href="http://otperc.net/2010/02/meg-tobb-net-fejleszto-kerestetik.html"&gt;.NET fejlesztőnek&lt;/a&gt;. (tesztelők jelentkezését még mindig várom!)&lt;br /&gt;
Ezúttal egy SQL gurut keresek:
&lt;/p&gt;
&lt;p&gt;
 &lt;h4&gt;SQL Fejlesztő&lt;/h4&gt;
 &lt;ul&gt;
  &lt;li&gt;Legalább 3 év SQL Server / T-SQL fejleszési tapasztalat&lt;/li&gt;
  &lt;li&gt;Műszaki végzettség&lt;/li&gt;
  &lt;li&gt;Angol nyelvtudás írásban és szóban&lt;/li&gt;
  &lt;li&gt;.NET / ASP.NET ismeret előny&lt;/li&gt;
 &lt;/ul&gt;
&lt;p&gt;

&lt;p&gt;
A munkavégzés helye Budapest belvárosa.&lt;br /&gt;
Jelentkezni a &lt;a href="mailto:geri@otperc.net"&gt;geri@otperc.net&lt;/a&gt; címre küldött önéletrajzzal lehet.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-858062266129351226?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/9L4BGMhB5uU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/858062266129351226/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/03/ms-sql-developer-wanted.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/858062266129351226?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/858062266129351226?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/9L4BGMhB5uU/ms-sql-developer-wanted.html" title="MS-SQL developer wanted" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/03/ms-sql-developer-wanted.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECQH8_cSp7ImA9WxBUFk0.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-5058729904980003807</id><published>2010-03-03T10:03:00.003+01:00</published><updated>2010-03-03T10:14:21.149+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-03T10:14:21.149+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tips'N'Tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title>Windows 7 multi-monitor trükkök</title><content type="html">&lt;p&gt;
Tudta Ön, hogy Windows 7-en, ha több monitort használ, a &lt;tt&gt;WIN + SHIFT + Bal / Jobb kurzormozgató&lt;/tt&gt; kombinációkkal ide-oda lehet dobálni az aktív ablakot a monitorok között?&lt;br /&gt;
Én eddig a zseniális &lt;a href="http://www.realtimesoft.com/ultramon/"&gt;UltraMon&lt;/a&gt;-t használtam (amit eztán is használni fogok, pl. a multi-taskbar támogatás miatt), de ez elég kényelmes, és out-of-the-box.
&lt;/p&gt;
&lt;p&gt;
Az eredeti forrás (és további hotkey-ek lelőhelye) &lt;a href="http://bienor.spaces.live.com/Blog/cns!4BF2B7C0C88086AC!6088.entry"&gt;Bienor blogja&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-5058729904980003807?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/2wCNLjJWKHs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/5058729904980003807/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/03/windows-7-multi-monitor-trukkok.html#comment-form" title="3 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/5058729904980003807?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/5058729904980003807?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/2wCNLjJWKHs/windows-7-multi-monitor-trukkok.html" title="Windows 7 multi-monitor trükkök" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://otperc.net/2010/03/windows-7-multi-monitor-trukkok.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEERnY6eSp7ImA9WxBUFU4.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-2260389198430735162</id><published>2010-03-02T13:55:00.002+01:00</published><updated>2010-03-02T13:56:47.811+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-02T13:56:47.811+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="caching" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Megjelent az AppFabric Beta 2</title><content type="html">&lt;p&gt;Nemrégiben írtam &lt;a title="Distributed Cache (former Velocity) in AppFabric" href="http://otperc.net/2009/11/velocity-is-dead-long-live-appfabric.html"&gt;az AppFabric-ba integrálódott Velocity&lt;/a&gt;-ről. Most ennek az &lt;a title="Windows Server AppFabric Beta 2 released" href="http://blogs.msdn.com/endpoint/archive/2010/02/26/windows-server-appfabric-beta-2-available.aspx"&gt;AppFabric-nak jelent meg a második bétája&lt;/a&gt; – ez a kiadás támogatja a .NET 4 / Visual Studio 2010 duó Release Candidate verzióját.&lt;/p&gt;  &lt;p&gt;A distributed cache vonalon az üzemeltetést könnyítő változásokat találhatunk(event log támogatás, PowerShell cmdletek cluster adminisztáláshoz) , illetve szofisztikáltabbá vált a memória kezelése azokban az esetekben, amikor sokkal több adatot próbálunk a cache-ünkbe gyömöszölni, mint amennyit annak fizikai memóriája elbírna.&lt;/p&gt;  &lt;p&gt;Letöltés a &lt;a title="Download AppFabric" href="http://msdn.microsoft.com/appfabric"&gt;http://msdn.microsoft.com/appfabric&lt;/a&gt; címről.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-2260389198430735162?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/ENrZa99sR-0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/2260389198430735162/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/03/appfabric-beta-2-released.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/2260389198430735162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/2260389198430735162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/ENrZa99sR-0/appfabric-beta-2-released.html" title="Megjelent az AppFabric Beta 2" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/03/appfabric-beta-2-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFSX0_eyp7ImA9WxBUEE8.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-1710327654421866945</id><published>2010-02-23T16:22:00.011+01:00</published><updated>2010-02-24T16:50:18.343+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-24T16:50:18.343+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="állásajánlat" /><title>Még több .NET fejlesztő kerestetik - Frissítve!</title><content type="html">&lt;p&gt;
Újfent .NET fejlesztőt keresek. Nem is csak egyet, sőt, nem is csak egy területre:
&lt;/p&gt;
&lt;p&gt;
 &lt;h4&gt;ASP.NET Engineer (meglepő módon webes területre)&lt;/h4&gt;
 &lt;ul&gt;
  &lt;li&gt;Legalább 3 év C# / .NET fejleszési tapasztalat&lt;/li&gt;
  &lt;li&gt;Kliensoldali webes technológiák (HTML, JavaScript, CSS) ismerete&lt;/li&gt;
  &lt;li&gt;Angol nyelvtudás írásban és szóban&lt;/li&gt;
  &lt;li&gt;SQL ismeret előny&lt;/li&gt;
 &lt;/ul&gt;
&lt;p&gt;

&lt;p&gt;
 &lt;h4&gt;.NET Developer (tesztelési területre)&lt;/h4&gt;
 &lt;ul&gt;
  &lt;li&gt;Erős C#, .NET Framework (2.0-3.5) ismeretek&lt;/li&gt;
  &lt;li&gt;SQL ismeretek&lt;/li&gt;
  &lt;li&gt;Szoftverfejlesztési és -tesztelési módszertanok ismerete&lt;/li&gt;
  &lt;li&gt;Webes technológiák általános ismerete&lt;/li&gt;
  &lt;li&gt;Angol nyelvtudás írásban és szóban&lt;/li&gt;
  &lt;li&gt;Szoftvertesztelési tapasztalat előny&lt;/li&gt;
  &lt;li&gt;C++ tapasztalat előny&lt;/li&gt;
 &lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
 &lt;br /&gt;
 &lt;b&gt;Update!&lt;/b&gt; További embereket is keresek, teszt területre. Ez nem annyira .NET, de hátha érdekel valakit... Nagy vonalakban teszt esetek kidolgozásáról és végrehajtásáról, a teszt konfigurációk telepítéséről és karbantartásáról, dokumentálásról szól.&lt;br /&gt;
 &lt;h4&gt;QA Engineer&lt;/h4&gt;
 Az ideális jelölt
 &lt;ul&gt;
  &lt;li&gt;néhány év szoftver tesztelési tapasztalat rendelkezik&lt;/li&gt;
  &lt;li&gt;jó általános informatikai "rálátása" van (szoftverek, rendszerek működése, Windows adminisztráció, hálózati ismeretek)&lt;/li&gt;
  &lt;li&gt;automatizálási ismeretekkel rendelkezik (scriptelés, programozói tudás)&lt;/li&gt;
  &lt;li&gt;angol és magyarul egyaránt jól kommunikál írásban és szóban&lt;/li&gt;
 &lt;/ul&gt;
&lt;p&gt;

&lt;p&gt;
&lt;br /&gt;
A munkavégzés helye Budapest belvárosa.&lt;br /&gt;
Jelentkezni a &lt;a href="mailto:geri@otperc.net"&gt;geri@otperc.net&lt;/a&gt; címre küldött önéletrajzzal lehet.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-1710327654421866945?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/bzyE2-lXJU4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/1710327654421866945/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/meg-tobb-net-fejleszto-kerestetik.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/1710327654421866945?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/1710327654421866945?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/bzyE2-lXJU4/meg-tobb-net-fejleszto-kerestetik.html" title="Még több .NET fejlesztő kerestetik - Frissítve!" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/meg-tobb-net-fejleszto-kerestetik.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ESH07fip7ImA9WxBVGUw.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-8589746583652954299</id><published>2010-02-22T23:56:00.006+01:00</published><updated>2010-02-23T10:36:49.306+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T10:36:49.306+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Szóvégi üres karakterek SQL-ben</title><content type="html">&lt;p&gt;
Ebből mi lesz?&lt;br /&gt;

&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="rem"&gt;-- Nincs space a szavakban&lt;/span&gt;
&lt;span class="kwrd"&gt;IF&lt;/span&gt; &lt;span class="str"&gt;'test'&lt;/span&gt; = &lt;span class="str"&gt;'test'&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Igaz'&lt;/span&gt;
&lt;span class="kwrd"&gt;ELSE&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Hamis'&lt;/span&gt;
    

&lt;span class="rem"&gt;-- Vegyük észre a szó eleji space-t&lt;/span&gt;
&lt;span class="kwrd"&gt;IF&lt;/span&gt; &lt;span class="str"&gt;'test'&lt;/span&gt; = &lt;span class="str"&gt;' test'&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Igaz'&lt;/span&gt;
&lt;span class="kwrd"&gt;ELSE&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Hamis'&lt;/span&gt;
    

&lt;span class="rem"&gt;-- Vegyük észre a szó végi space-t&lt;/span&gt;
&lt;span class="kwrd"&gt;IF&lt;/span&gt; &lt;span class="str"&gt;'test'&lt;/span&gt; = &lt;span class="str"&gt;'test '&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Igaz'&lt;/span&gt;
&lt;span class="kwrd"&gt;ELSE&lt;/span&gt;
    &lt;span class="kwrd"&gt;PRINT&lt;/span&gt; &lt;span class="str"&gt;'Hamis'&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
Ebből az lesz, hogy:&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;Igaz&lt;br /&gt;
Hamis&lt;br /&gt;
&lt;b&gt;Igaz&lt;/b&gt;&lt;/tt&gt;
&lt;/p&gt;
&lt;p&gt;
Meglepő? &lt;a href="http://support.microsoft.com/kb/316626"&gt;Ezért&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-8589746583652954299?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/Gy3J0FJjOh4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/8589746583652954299/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/sql-server-trailing-spaces.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8589746583652954299?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8589746583652954299?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/Gy3J0FJjOh4/sql-server-trailing-spaces.html" title="Szóvégi üres karakterek SQL-ben" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/sql-server-trailing-spaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAEQn8yeip7ImA9WxBVFEQ.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-7156623792230699062</id><published>2010-02-17T21:57:00.008+01:00</published><updated>2010-02-18T12:48:23.192+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-18T12:48:23.192+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tips'N'Tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Saving changes is not permitted (SQL Server 2008)</title><content type="html">&lt;p&gt;&lt;/p&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hb-k5lQC-M8/S3xaQdlCjvI/AAAAAAAAAtA/4lq1XaYp-N0/s1600-h/SqlManCantSave.jpg"&gt;&lt;img style="margin: 0px 20px 10px 0px; width: 161px; float: left; height: 131px; cursor: hand" id="BLOGGER_PHOTO_ID_5439321688821108466" border="0" alt="" src="http://2.bp.blogspot.com/_hb-k5lQC-M8/S3xaQdlCjvI/AAAAAAAAAtA/4lq1XaYp-N0/s320/SqlManCantSave.jpg" width="169" height="138" /&gt;&lt;/a&gt; Aki SQL Management Studio 2008-cal dolgozik, az belefuthatott már a jelenségbe, hogy bizonyos táblaséma-módosító műveleteket nem képes a grafikus felületen elvégezni. Például ha egy NULL értéket felvenni képes mezőtől szeretnénk elvenni ezt a képességét, akkor a sémamódosítás helyett jön az ábrán látható dialógus, ami aztán a &lt;i&gt;&amp;quot;User canceled out of save dialog (MS Visual Database Tools)&amp;quot;&lt;/i&gt; című üzenetbe, majd az addigi módosításaink elvesztésébe torkollnak.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ezzel azért örvendeztet meg minket a Management Studio, hogy emlékeztessen: ami a felületről 1-2 kattintás, az a rideg valóságban nem mindig olyan egyszerű. Az alábbi séma-módosító műveletek végrehajtása nem triviális: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Új mező beszúrása létező oszlopok közé &lt;/li&gt;    &lt;li&gt;Oszlop törlése &lt;/li&gt;    &lt;li&gt;NULL érték engedélyezése/tiltása &lt;/li&gt;    &lt;li&gt;Oszlop adattípusának megváltoztatása &lt;/li&gt;    &lt;li&gt;Oszlopok sorrendjének megváltoztatása &lt;/li&gt; &lt;/ul&gt; A végrehajtásuk annyira nem triviális, hogy igazából lehetetlen - az, hogy mégis elvégezhetők, annak köszönhető, hogy a Management Studio a háttérben egy ügyes scriptet generál és futtat. A script egy új táblát hoz létre a kívánt sámával, majd átbűvészkedi bele a régi táblában található adatainkat. Innentől az már csak névdonornak kell: eldobásra kerül, az újonnan létrejött tábla pedig felveszi a személyazonosságát. Pont olyan, &lt;i&gt;mintha&lt;/i&gt;.   &lt;br /&gt;A GUI felől ebből semmi nem látszik, egy esetet kivéve: ha egy éles, terhelés alatt álló adatbázis sok rekordot tartalmazó tábláján machinálunk, mert azt tuti észre lehet majd venni a GUI felől is. Csak nem afelől a GUI felől, amelyik felől mi szeretnénk. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hb-k5lQC-M8/S3xkH6_4YFI/AAAAAAAAAtI/NahoN5EB7Lg/s1600-h/PreventSaving.jpg"&gt;&lt;img style="text-align: center; margin: 10px 0px 0px 45px; width: 400px; display: inline; height: 242px; cursor: hand" id="BLOGGER_PHOTO_ID_5439332537215770706" border="0" alt="" align="right" src="http://2.bp.blogspot.com/_hb-k5lQC-M8/S3xkH6_4YFI/AAAAAAAAAtI/NahoN5EB7Lg/s400/PreventSaving.jpg" /&gt;&lt;/a&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ezt a működést hívhatjuk mondjuk &amp;quot;üzemeltető-barát&amp;quot; beállításnak (nehezebb nagy hülyeséget csinálni), fejlesztési időben viszont mezők jönnek-mennek, közelező adatokról derül ki, hogy nem mindig ismertek, és más anomáliák is gyakran történnek - tehát jól esne, ha nem szopatna minket még a Management Studio is.    &lt;br /&gt;Szerencsére néhány (hat) kattintással "fejlesző-baráttá" tehető a működés: a &lt;i&gt;&lt;b&gt;Tools -&amp;gt; Options -&amp;gt; Designers -&amp;gt; Table and Database Designers&lt;/b&gt;&lt;/i&gt; fülön a &lt;i&gt;&lt;b&gt;Prevent saving changes that require table re-creation&lt;/b&gt;&lt;/i&gt; opció elől ki vell venni a pipát:&amp;#160; Így már vidáman módosíthatunk a sémánkon. Érdemes néha a Generate Change Script gombra is rábökni, hogy miket gépel helyettünk össze a Management Studio. Köszönjük! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-7156623792230699062?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/UgJDAxNqfvI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/7156623792230699062/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/saving-changes-is-not-permitted-sql.html#comment-form" title="1 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7156623792230699062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7156623792230699062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/UgJDAxNqfvI/saving-changes-is-not-permitted-sql.html" title="Saving changes is not permitted (SQL Server 2008)" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_hb-k5lQC-M8/S3xaQdlCjvI/AAAAAAAAAtA/4lq1XaYp-N0/s72-c/SqlManCantSave.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://otperc.net/2010/02/saving-changes-is-not-permitted-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENSHg_fCp7ImA9WxBVE0k.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-7301407666110581826</id><published>2010-02-16T17:53:00.003+01:00</published><updated>2010-02-16T18:18:19.644+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T18:18:19.644+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><title>Windows 7 (vs. VS)</title><content type="html">&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hb-k5lQC-M8/S3rNo_eHXrI/AAAAAAAAAsg/8e2-_cRF5Fo/s1600-h/VsMemory.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://3.bp.blogspot.com/_hb-k5lQC-M8/S3rNo_eHXrI/AAAAAAAAAsg/8e2-_cRF5Fo/s320/VsMemory.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5438885604119502514" /&gt;&lt;/a&gt;
A Windows 7 ezzel sokkol mostanában (mióta felkerült a Visual Studio 2010 RC). Van 3 &lt;a href="http://en.wikipedia.org/wiki/Gibibyte"&gt;Gibi&lt;/a&gt; RAM-om (igazából 4, de a 32 bites OS abból valamivel több, mint 3-at lát).
&lt;/p&gt;
&lt;p&gt;
Elismerem, lehet olyan szituáció, amikor hasznos, hogy szól, hogy közel a vég - de nálam a devenv.exe 284 MB-ot eszik, ami ugyan nem kevés, de még mindig kevesebb, mint tizede az összes memóriának.&lt;br /&gt;
1.5G cache mellett is van még 800 mega szabad RAM-om.
&lt;/p&gt;
&lt;p&gt;
Szerencsére (kis registry trükközéssel) kikapcsolható a dolog: &lt;a href="http://www.kylirhorton.com/2009/disabling-low-memory-messages/"&gt;Disabling the “Your computer is low on memory” and “Close programs to prevent information loss” dialogs&lt;/a&gt;.&lt;br /&gt;
Peace!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-7301407666110581826?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/yqHAr_9uc0M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/7301407666110581826/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/windows-7-vs-vs.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7301407666110581826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7301407666110581826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/yqHAr_9uc0M/windows-7-vs-vs.html" title="Windows 7 (vs. VS)" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_hb-k5lQC-M8/S3rNo_eHXrI/AAAAAAAAAsg/8e2-_cRF5Fo/s72-c/VsMemory.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/windows-7-vs-vs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QMRHY4fip7ImA9WxBVEkw.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-4988471364498494919</id><published>2010-02-15T07:20:00.005+01:00</published><updated>2010-02-15T07:29:45.836+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T07:29:45.836+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="állásajánlat" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Senior .NET fejlesztő kerestetik</title><content type="html">&lt;p&gt;Szolgálati közlemény: webes területen tapasztalt .NET fejlesztő kerestetik, .NET 3.5 / C# 3.0+, ASP.NET (MVC és/vagy WebForms, Web Services), verziókezelő-rendszer használati tapasztalattal.&lt;br&gt;
Bővebb információ, kapcsolat: &lt;a href="http://ssp.cloudapp.net/dotnet"&gt;http://ssp.cloudapp.net/dotnet&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-4988471364498494919?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/gBVWrkqOWdo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/4988471364498494919/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/senior-net-fejleszto-kerestetik.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4988471364498494919?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4988471364498494919?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/gBVWrkqOWdo/senior-net-fejleszto-kerestetik.html" title="Senior .NET fejlesztő kerestetik" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/senior-net-fejleszto-kerestetik.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8CRX08cSp7ImA9WxBVEUU.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-7289476400165688743</id><published>2010-02-14T23:10:00.004+01:00</published><updated>2010-02-15T00:07:44.379+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T00:07:44.379+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mvc" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>ASP.NET 4.0 Request Validation</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://stephenwalther.com/blog/images/stephenwalther_com/blog/WindowsLiveWriter/Tip48DisableRequestValidation_114C1/clip_image002_thumb.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 461px; height: 371px;" src="http://stephenwalther.com/blog/images/stephenwalther_com/blog/WindowsLiveWriter/Tip48DisableRequestValidation_114C1/clip_image002_thumb.jpg" alt="" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;
Történt, hogy a &lt;a href="http://tinymce.moxiecode.com/"&gt;Moxicode TinyMCE editor&lt;/a&gt;-ját szerettem volna használni egy MVC alkalmazásban - a válaszott platform és az IDE pedig természetesen mi más is lehetett volna, mint a .NET Framework 4.0 RC, illetve a Visual Studio 2010 RC.
&lt;/p&gt;
&lt;p&gt;
Némi plumbing kód megírása után az elgondolás életre is kelt és prímán működött - egészen az első POST-ig, amiután a "&lt;tt&gt;System.Web. HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (&lt;i&gt;form-elem-neve&lt;/i&gt;="&lt;i&gt;veszélyes-dolgok-pl-html&lt;/i&gt;").&lt;/tt&gt;" üzenettel elragadott a Sárga Halál. Hát, persze, ilyesmit nem lehet POST-olni, mert a HTTP request validációja során az ASP.NET motor megtagadja a kérés viszolgálását, ha valami potenciálisan veszélyeset (pl. HTML kódot) talál a POST-olt értékek közt. Ki kell kapcsolni a validációt az adott oldalra.
&lt;/p&gt;
&lt;p&gt;
Mi sem egyszerűbb ennél, az .aspx oldalunk @Page direktívájánál megmondjuk, hogy &lt;tt&gt;ValidateRequest="false"&lt;/tt&gt;, és kész is vagyunk.

Illetve lennénk, ha ez egy WebForms alkalmazás lenne. Az MVC applikációnkat teljes mértékben hidegen hagyja ez a beállítás, és továbbra is validál. Kis keresés, és halleluja: az MVC motor máshol validál, mint a WebForms, &lt;a href="http://stephenwalther.com/blog/archive/2009/02/20/tip-48-ndash-disable-request-validation.aspx"&gt;itt a Controller feladata a validálás, és az Action-ökre rakott &lt;tt&gt;[ValidateInput]&lt;/tt&gt; attribútummal szabályozhatjuk&lt;/a&gt;, hogy szeretnénk-e validálást, vagy sem. Editálás esetén nem akartam:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
[ValidateInput(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Edit(&lt;span class="kwrd"&gt;string&lt;/span&gt; id)
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; View();
}&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Egyszerű - viszont ugyanúgy nem működött, mint az előző megközelítés. Itt már hosszabb és keservesebb nyomozás következett, de végül meglett az ok: &lt;a href="http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes/#_TOC4"&gt;ASP.NET 4.0 Beta 2-től megváltozott a default request-validálási módszer, már a BeginRequest alatt megtörténik&lt;/a&gt;. A változtatás azt célozza, hogy a request validation áldásos tevékenységét ne csak .aspx oldalakon, hanem webservice híváson, handlereken, egyebeken is élvezhessük.&lt;br /&gt;
Hogy ezt az új fajta validációt hogy lehet kikapcsolni, nem tudom; de vissza lehet térni a "régihez", ami tiszteletben tartja a direktívákat és attribútumokat, mindössze egy sort kell elhelyeznünk a &lt;tt&gt;Web.config&lt;/tt&gt;unkban:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;httpRuntime&lt;/span&gt; &lt;span class="attr"&gt;requestValidationMode&lt;/span&gt;&lt;span class="kwrd"&gt;="2.0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Szintén 4.0-ás újdonság, hogy &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2010/01/05/oh-gosh-validating-user-input-is-extensible.aspx"&gt;saját validátort is készíthetünk&lt;/a&gt;, amit szintén a httpRuntime elem attribútumaként adhatunk meg:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;httpRuntime&lt;/span&gt; &lt;span class="attr"&gt;requestValidationType&lt;/span&gt;&lt;span class="kwrd"&gt;="MyValidator, MyAssembly"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Végezetül, ha kikapcsoljuk a "gyári" validációt, ne feledkezzünk meg helyette saját ellenőrző kódokat beépíteni.&lt;br /&gt;
Boldog Validálást!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-7289476400165688743?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/JOWkMIDKbTs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/7289476400165688743/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/aspnet-40-request-validation.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7289476400165688743?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7289476400165688743?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/JOWkMIDKbTs/aspnet-40-request-validation.html" title="ASP.NET 4.0 Request Validation" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/aspnet-40-request-validation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMHR3w7fip7ImA9WxBWGUo.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-3414029338044874749</id><published>2010-02-12T11:25:00.001+01:00</published><updated>2010-02-12T11:27:16.206+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T11:27:16.206+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="CLR" /><title>flee - Fast Lightweight Expression Evaluator</title><content type="html">&lt;p&gt;
A &lt;a href="http://flee.codeplex.com/"&gt;flee (Fast Lightweight Expression Evaluator)&lt;/a&gt; pont az, ami a neve. Egy gyors, pehelysúlyú kifejezés kiértékelő - aki dolgozott már &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx"&gt;LINQ Dynamic Query Library&lt;/a&gt;-vel, annak nagyjából érthető miről van szó. Erről:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
{
    var ctx = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExpressionContext();
    ctx.Variables.Add(&lt;span class="str"&gt;"now"&lt;/span&gt;, DateTime.Now);
    var expression = ctx.CompileGeneric&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(&lt;span class="str"&gt;"now.ToString(\"yyyy-MMMM-dd (dddd)\").ToUpper()"&lt;/span&gt;);
    var result = expression.Evaluate();
    Console.WriteLine(result); &lt;span class="rem"&gt;// Output: "2010-FEBRUÁR-12 (PÉNTEK)"&lt;/span&gt;
}&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Azaz egy sztring-kifejezésből, mint pl. a "&lt;tt&gt;sqrt(a^2 + b^2)&lt;/tt&gt;" vagy a "&lt;tt&gt;now.ToString("yyyy-MMMM-dd (dddd)").ToUpper()&lt;/tt&gt;" képes IL kódot előállítani. A kifejezésünk nyelve kicsit C#, kicsit VB, erősen típusos, de nem case sensitive...
&lt;/p&gt;
&lt;p&gt;
A flee LGPL licencelésű, ami praktikusan azt jelenti, hogy ha (az egyébként letölthető) forráskódján nem módosít az ember, csak a lefordított assemblyt referenciálja, akkor szabadon használható akár nyílt, akár zárt, non-profit vagy for-profit feljesztésekben egyaránt.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-3414029338044874749?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/BS3fyXp-wrM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/3414029338044874749/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/flee-fast-lightweight-expression.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3414029338044874749?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3414029338044874749?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/BS3fyXp-wrM/flee-fast-lightweight-expression.html" title="flee - Fast Lightweight Expression Evaluator" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/flee-fast-lightweight-expression.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMMSHkzfip7ImA9WxBWGEQ.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-2937033822496835635</id><published>2010-02-11T11:33:00.002+01:00</published><updated>2010-02-11T15:11:29.786+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T15:11:29.786+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Process Monitor vs. Visual Studio 2010</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_hb-k5lQC-M8/S3Pdv8RD1dI/AAAAAAAAAsQ/pkysId70CbA/s1600-h/VS2010B2-Uninstall%5B15%5D.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VS2010B2-Uninstall" border="0" alt="VS2010B2-Uninstall" align="right" src="http://lh6.ggpht.com/_hb-k5lQC-M8/S3PdwVZRfmI/AAAAAAAAAsU/Hw3Mg4-10E8/VS2010B2-Uninstall_thumb%5B13%5D.jpg?imgmax=800" width="244" height="185" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Természetesen engem sem hagyott hidegen a Visual Studio 2010 kiadásra jelölt verziójának megjelenése. A letöltés gyorsan megvolt, az telepítéshez azonban el kellett távolítani az előző, Beta 2-es verziót – az upgrade lehetőség hiánya megszokott a beta vagy CTP jelölésű termékeknél. Nosza, uninstalláljunk!&lt;/p&gt;  &lt;p&gt;Control Panel, Programs and Features, VS 2010, remove. A fenti állapotig sikerült eljutni körülbelül 1 perc alatt, aztán vége. Vártam 10 percet, hátha lesz valami, de nem. Hát jó, akkor elő kell venni a sok éves szakmai tapasztalatot és profizmust: ezt bizony újra köll indítani!&lt;/p&gt;  &lt;p&gt;Sajnos a csodafegyver nem segített. Ugyanebbe az állapotba jutottunk. Ide finomabb műszerek fognak kelleni!&lt;/p&gt;  &lt;p&gt;Az feltűnt, hogy az alkalmazás nem fagy le a szó klasszikus értemében: valószínű mindenki ismeri a “nem válaszol” állapotot, amikor se kép, se hang. Na, itt nem ez volt: ez valamit molyolhat a háttében, de se a procit nem tekeri, se a memóriát nem zabálja, se őrületes I/O-t nem produkál a Task Manager szerint.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hb-k5lQC-M8/S3PdwgglxuI/AAAAAAAAAsY/-yHS0wFskpc/s1600-h/VS2010B2-Uninstall-ProcMon%5B5%5D.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VS2010B2-Uninstall-ProcMon" border="0" alt="VS2010B2-Uninstall-ProcMon" align="left" src="http://lh6.ggpht.com/_hb-k5lQC-M8/S3PdxDOO99I/AAAAAAAAAsc/3NM0itMnx1c/VS2010B2-Uninstall-ProcMon_thumb%5B3%5D.jpg?imgmax=800" width="244" height="79" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Meg kéne tudni, mivel molyol az alkalmazás. Erre kiváló eszköz a &lt;a href="http://technet.microsoft.com/sysinternals/"&gt;Sysinternals&lt;/a&gt; utilitik közül a &lt;a href="http://technet.microsoft.com/hu-hu/sysinternals/bb896645%28en-us%29.aspx"&gt;Process Monitor&lt;/a&gt;. A mellékelt képen látszik, hogy a setup.exe valamiért szerelembe esett a Z: meghajtómmal, és mindenféle temp fileokat pakol oda. A dolog szépséghibája, hogy az én Z:-m egy WebDav-on keresztül hálózati meghajtóként felmappelt dokumentumtár, ami sok mindenre jó, speciel nagy mennyiségű, relative kis fájl tömeges, gyors létrehozására, olvasására, törlésére teljes mértékben alkalmatlan.&lt;/p&gt;  &lt;p&gt;Az igazi vicc, hogy amolyan harctéri sebész módjára szépen lecsatoltam a Z: meghajtóm – a setup.exe leállítása nélkül. Az még kicsit próbálkozott, aztán mikor belátta, hogy volt zé, nincs zé, szó nélkül továbbfutott, és néhány perc alatt eltakarította a Visual Studio 2010 Beta 2-t.&lt;/p&gt;  &lt;p&gt;Remélem így én is hamarosan csatlakozhatok az RC sebességéről, stabilitásáról áradozók egyre népesebb csoportjához! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-2937033822496835635?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/DyWbeVOgJUY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/2937033822496835635/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/visual-studio-2010-vs-process-monitor.html#comment-form" title="1 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/2937033822496835635?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/2937033822496835635?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/DyWbeVOgJUY/visual-studio-2010-vs-process-monitor.html" title="Process Monitor vs. Visual Studio 2010" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://otperc.net/2010/02/visual-studio-2010-vs-process-monitor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIARXc7eCp7ImA9WxBWF08.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-9193911388497183255</id><published>2010-02-09T15:41:00.002+01:00</published><updated>2010-02-09T15:42:24.900+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-09T15:42:24.900+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Tuple</title><content type="html">&lt;blockquote&gt;   &lt;p&gt;&lt;q&gt;- Mit tettek értünk a &lt;del&gt;ró&lt;/del&gt; redmondiak? Semmit!         &lt;br /&gt;- &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/02/08/vs-2010-net-4-release-candidate.aspx"&gt;Visual Studio 2010 Relase Candidate!&lt;/a&gt;         &lt;br /&gt;- Mit?         &lt;br /&gt;- VS2010 RC.         &lt;br /&gt;- Ó, igen, ezt ők adták, ez igaz.         &lt;br /&gt;- És &lt;a href="http://otperc.net/2009/12/covariance-and-contravariance-in-c-40.html"&gt;variancia-támogatást a nyelvbe.&lt;/a&gt;         &lt;br /&gt;- Igen, relase candidate-et, és variancia támogatást, igen, de ezektől eltekintve...         &lt;br /&gt;- Az &lt;a href="http://otperc.net/2009/11/velocity-is-dead-long-live-appfabric.html"&gt;AppFabricot&lt;/a&gt;!         &lt;br /&gt;- Jól van, de eltekintve a release candide-től, a variancia-támogatástól, az AppFabrictól, a dinamikus nyelvek támogatásától, az újraírt workflowtól eltekintve... mit adtak nekünk a &lt;del&gt;ró&lt;/del&gt;redmondiak?&lt;/q&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;img style="margin: 5px 15px 5px 0px; display: inline" align="left" src="http://i.telegraph.co.uk/telegraph/multimedia/archive/01173/arts-graphics-2006_1173697a.jpg" width="185" height="132" /&gt; Hát a &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd942829.aspx"&gt;Tuple&lt;/a&gt;-t.     &lt;br /&gt;A tuple egy olyan adatszerkezet, ami több, különböző típusú &amp;quot;al-elemet&amp;quot; fog össze. Kb. mint egy tömb, aminek mindegyik eleme más-más típusú lehet. &lt;/p&gt;  &lt;p&gt;Képzeljük el, hogy egy metódusban vissza kell adnunk egy string-et és egy int-et. Több lehetőségünk is van, pl. string visszatérési érték + 1 out int paraméter használata, vagy egy egyszerű, &amp;quot;adathordozó&amp;quot; oszály legyártása, ami pont egy string-et és egy int-et tud getelni-setelni. Lehetőleg inkább csak getelni, setelni csak a létrehozásakor. Na a Tuple pont ez utóbbit tudja. &lt;/p&gt;  &lt;p&gt;A Tuple egy generikus adatszerkezet, ami a generikus típusparamétereinek megfelelő adatokat tudja tárolni. Az adattagokat csak létrehozáskor lehet beállítani, a tuple példány életciklusában később már csak getelni lehet az tuple által biztosított Item1, Item2, Item&lt;i&gt;n&lt;/i&gt; propertyken keresztül. Mivel ez legalább olyan érthetetlen lett, mint a többi magyarázatom, jöjjön a példa: &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;var tuple = &lt;span class="kwrd"&gt;new&lt;/span&gt; Tuple&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;(&lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt;, 42);
&lt;span class="kwrd"&gt;string&lt;/span&gt; s1 = tuple.Item1;
&lt;span class="kwrd"&gt;string&lt;/span&gt; s2 = tuple.Item2;
&lt;span class="kwrd"&gt;int&lt;/span&gt; i = tuple.Item3;&lt;/pre&gt;

&lt;br /&gt;Még elegánsabb, ha a Tuple.Create() statikus metódussal gyártjuk le a Tuple példányunkat, ekkor ugyanis a fordító képes a generikus típusparamétereket a metódushívás paramétereinek típusából kiinferálni. Magyarul, nem kell kiírni a kacsacsőrös rész: &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;pre class="csharpcode"&gt;var tuple = Tuple.Create(&lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt;, 42);&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ennyi. Nem rakétatudomány, de hasznos kis tool. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-9193911388497183255?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/zNPKibmc-N0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/9193911388497183255/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/02/tuple.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/9193911388497183255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/9193911388497183255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/zNPKibmc-N0/tuple.html" title="Tuple" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/02/tuple.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEFQng_eip7ImA9WxBQFUo.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-3014216988991608468</id><published>2010-01-15T19:00:00.002+01:00</published><updated>2010-01-15T19:03:33.642+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-15T19:03:33.642+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="padlófék" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Visual Studio 2010 Sexy Edition</title><content type="html">&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hb-k5lQC-M8/S1Cssz5lH-I/AAAAAAAAAp8/E1OCdlCTpqU/s1600-h/Visual_Studio_Sexy_Edition.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://3.bp.blogspot.com/_hb-k5lQC-M8/S1Cssz5lH-I/AAAAAAAAAp8/E1OCdlCTpqU/s320/Visual_Studio_Sexy_Edition.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5427027436827385826" /&gt;&lt;/a&gt;

A közelgő Visual Studio 2010 releassel kapcsolatban egy érdekes pletyka szivárgott ki a napokban a Microsofttól. A szoftverfejlesztő keretrendszernek egy  speciális kiadása is elérhetővé válik majd 2010 április 12.-én: a Visual Studio Sexy Edition. A programról a splash screen mellett néhány technikai információ is napvilágot látott.
&lt;/p&gt;
&lt;p&gt;
A kiadás érdekessége, hogy a már megszokott programnyelveket - a C#-ot, illetve Visual Basic .NET-et - nem támogatja a kiadás, és az újdonságként érkező F# nyelven sem tudunk alkalmazásokat fejleszteni segítségével, mindössze egyetlen programnyelvet, az abszolút újdonságként debütáló L#-ot fogja támogatni.
&lt;/p&gt;
&lt;p&gt;A Comenius Logo fejlesztői közösség máris azzal vádolja a redmondiakat, hogy az L# tulajdonképpen egy nagy nyúlás, egy az egybe' a logóról, mindössze a bonyolultabb nyelvi elemeket hagyták el. Egyesek jogi lépéseket, mások öri harit fontolgatnak.&lt;br /&gt;
A &lt;a href="http://en.wikipedia.org/wiki/LOLCODE"&gt;LOLCODE&lt;/a&gt; fejlesztők viszont üdvözölték az újonnan megjelenő lehetőséget, mert bár &lt;a href="http://code.google.com/p/lolcode-dot-net/"&gt;.NET LOLCODE compiler&lt;/a&gt; eddig is létezett, de most végre ők is a .NET ecosystem first class citizenjei lehetnek - igaz, ehhez egy új nyelvet kell elsajátítaniuk. Szerencsére ebben segít a közeljövőben megjelenő &lt;a href="http://norvig.com/21-days.html"&gt;Teach yourself L# in one hour (including a 10 minutes long coffee break)&lt;/a&gt; című könyv.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-3014216988991608468?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/ocZgcjoOW1U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/3014216988991608468/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/01/visual-studio-2010-sexy-edition.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3014216988991608468?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3014216988991608468?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/ocZgcjoOW1U/visual-studio-2010-sexy-edition.html" title="Visual Studio 2010 Sexy Edition" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_hb-k5lQC-M8/S1Cssz5lH-I/AAAAAAAAAp8/E1OCdlCTpqU/s72-c/Visual_Studio_Sexy_Edition.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/01/visual-studio-2010-sexy-edition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCRnkyeSp7ImA9WxBRGUs.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-8082423188871659445</id><published>2010-01-08T16:20:00.001+01:00</published><updated>2010-01-08T16:22:47.791+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-08T16:22:47.791+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>Enum.TryParse</title><content type="html">&lt;p&gt;
Tegyük fel, hogy van egy ilyen enumerációnk:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;enum&lt;/span&gt; Fruit
{
    Apple,
    Pear,
    Grape
}&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Amennyiben valahonnan egy ilyen enum értéket sztringként kaptunk meg (tehát pl. volt egy olyan sztringünk, hogy "Apple"), és azt szerettük volna a konkrét enum értékke alakítani, az &lt;tt&gt;Enum.Parse()&lt;/tt&gt; statikus metódushoz fordulhattunk segítségért:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ParseEnum(&lt;span class="kwrd"&gt;string&lt;/span&gt; fruitName)
{
    Fruit fruit = &lt;span class="kwrd"&gt;default&lt;/span&gt;(Fruit);
    &lt;span class="kwrd"&gt;bool&lt;/span&gt; parsingSuccesful;

    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        fruit = (Fruit)Enum.Parse(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Fruit), fruitName);
        parsingSuccesful = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (ArgumentException)
    {
        parsingSuccesful = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
    }

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (parsingSuccesful)
    {
        Console.WriteLine(&lt;span class="str"&gt;"Enum parsed succesfully, value: {0}."&lt;/span&gt;, fruit);
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        Console.WriteLine(&lt;span class="str"&gt;"Enum couldn't be parsed."&lt;/span&gt;);
    }
}&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Működni működik, de elég cifra kód. A Framework 4.0 Base Class Library-jében kapunk egy új, generikus metódust, a &lt;tt&gt;TryParse()&lt;/tt&gt;, amivel jóval egyszerűbbé és érthetőbbé válik a kód:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ParseEnum40(&lt;span class="kwrd"&gt;string&lt;/span&gt; fruitName)
{
    Fruit fruit;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (Enum.TryParse(fruitName, &lt;span class="kwrd"&gt;out&lt;/span&gt; fruit))
    {
        Console.WriteLine(&lt;span class="str"&gt;"Enum parsed succesfully, value: {0}."&lt;/span&gt;, fruit);
    }
    &lt;span class="kwrd"&gt;else&lt;/span&gt;
    {
        Console.WriteLine(&lt;span class="str"&gt;"Enum couldn't be parsed."&lt;/span&gt;);
    }
}&lt;/pre&gt;
Külön szépség, hogy bár az &lt;tt&gt;Enum.TryParse()&lt;/tt&gt; egy generikus metódus (tehát valójában az &lt;tt&gt;Enum.TryParse&amp;lt;Fruit&amp;gt;()&lt;/tt&gt;-ot hívjuk), de a típusparamétert - mivel az ugyanaz, mint a második függvényparaméter, az out fruit típusa -, nem kell kiírnunk, a fordító &lt;i&gt;kiinferálja&lt;/i&gt; nekünk.
&lt;/p&gt;
&lt;p&gt;
Mindennek ellenére, hogy most már ilyen rettenetesen könnyű és szép enumokkal dolgozni, azért azt tartsuk észben, hogy az enum-sztring konverzió elég lassúcska, teljesítményérzékeny alkalmazásokban néha &lt;a href="http://soci.hu/blog/index.php/2009/02/05/net-teljesitmenyhangolasi-tapasztalatok-4/"&gt;rá kell programoznunk&lt;/a&gt;, ha nem akarunk odaborostásodni a gép elé.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-8082423188871659445?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/_2eG_hc-zBg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/8082423188871659445/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/01/enumtryparse.html#comment-form" title="2 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8082423188871659445?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8082423188871659445?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/_2eG_hc-zBg/enumtryparse.html" title="Enum.TryParse&lt;TEnum&gt;" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://otperc.net/2010/01/enumtryparse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4BQ306eSp7ImA9WxBRGEo.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-3087259120339299276</id><published>2010-01-07T15:23:00.004+01:00</published><updated>2010-01-07T15:35:52.311+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-07T15:35:52.311+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework 4.0" /><title>.NET Framework 4 poszter</title><content type="html">&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hb-k5lQC-M8/S0Xv27MeHYI/AAAAAAAAAo4/DoIDPT2zBLs/s1600-h/FW4Poster.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 132px;" src="http://1.bp.blogspot.com/_hb-k5lQC-M8/S0Xv27MeHYI/AAAAAAAAAo4/DoIDPT2zBLs/s200/FW4Poster.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5424005053119602050" /&gt;&lt;/a&gt;
A "fejlesztői poszterek" az internet feltalálása óta valószínűleg a világ leghaszontalanabb dolgai közé számítanak, ennek ellenére szeretjük őket.&lt;br /&gt;
Egy fejlesztői szoba osztályokat ábrázoló poszterek nélkül olyan, mint egy lakatosműhely &lt;a href="http://blogs.coventrytelegraph.net/passtheremote/samfox.jpg"&gt;Samantha Fox&lt;/a&gt; poszter nélkül: jó, jó, de nem igazán kelt professzionális hatást.
&lt;/p&gt;
&lt;p&gt;
A Framework 4.0-ás verziójának közelgő megjelenésével egyúttal a szabad falfelületek további apadására is lehet számítani: &lt;a href="http://download.microsoft.com/download/E/6/A/E6A8A715-7695-493C-8CFA-8E0C23A4BE1D/098-115952-NETFX4-Poster.pdf"&gt;NETFX4-Poster.pdf&lt;/a&gt;!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-3087259120339299276?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/0jZTKkIl_w8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/3087259120339299276/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/01/net-framework-4-poszter.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3087259120339299276?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3087259120339299276?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/0jZTKkIl_w8/net-framework-4-poszter.html" title=".NET Framework 4 poszter" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_hb-k5lQC-M8/S0Xv27MeHYI/AAAAAAAAAo4/DoIDPT2zBLs/s72-c/FW4Poster.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/01/net-framework-4-poszter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ERHY_fip7ImA9WxBRGEs.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-3254898300286232662</id><published>2010-01-06T18:24:00.006+01:00</published><updated>2010-01-07T11:40:05.846+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-07T11:40:05.846+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Miért pont 1753-01-01?</title><content type="html">&lt;p&gt;
Vajon miért pont 1753 január 1. a legkorábbi dátum, amit az SQL Server a datetime típusban tárolni képes? &lt;i&gt;For some historical reasons&lt;/i&gt; - jelen esetben szó szerint.
&lt;/p&gt;
&lt;p&gt;
Bár az embernek könnyen úgy tűnhet, hogy az, hogy mi most 2010-et írunk, valami egyetemleges reprezentációja az idő múlásának, igazából számos naptár-rendszer létezett, és létezik ma is (az ortodox zsidók szerint pl. most 5770 van).&lt;br /&gt;
Európa nagy részén már a mai időszámítás kezdetétől a Juliánusz-naptárat használták, ami körülbelül ugyanaz, mint a ma is használatos naptár, leszámítva, hogy nincsenek benne szökőévek. (update: Voltak benne szökőévek - pont az volt a baj, hogy túl sok. A Julián-naptár éve mintegy 11 perccel hosszabb, mint a tropikus év.) Emiatt viszont lassan "csúszkálni" kezdtek az évszakok, ami nem volt túl kellemes. A tarthatatlan helyzetet megoldandó, XIII. Gergely pápa kidolgozta a Gregorián- (Gergely-) naptárat, amiben egyrész már voltak szökőnapok, másrészt a bevezetésének volt egy kis trükkje, mert az addig összeszedett csúszást át kellett "időugrani".
&lt;/p&gt;
&lt;p&gt;
Nem is volt zökkenőmentes a bevezetés, az országok szinte egyenként vezették csak be. Az angolszász világ pl. 1752 szeptember 4.-én - másnap már egy szép őszi szeptember 14 virradt rájuk. Az 1752 szeptember 14 előtti dátumok kezelése így több szempontból is problémás: egyrészt a hiányzó 10 nap miatt, másrészt kultúrától függően mást-mást jelent egy dátum, meg aztán az se világos, hogy előtte akkor kell-e számolni a szökőévekkel, vagy sem...
&lt;/p&gt;
&lt;p&gt;
A SQL Server fejlesztő a &lt;del&gt;Microso&lt;/del&gt; Sybase-nél pedig egy huszárvágással letudták a nehézségeket: nem kezelnek 1753 előtti dátumokat.
&lt;/p&gt;
&lt;p&gt;
Persze voltak államok, ahol még ennél is később vezették be a Gergely-naptárat, a nagy Szovjetúnióban pl. csak az első világháború után - nem véletlenül volt a Nagy &lt;i&gt;Októberi&lt;/i&gt; Szocialista Forradalom évfordulója november 7.-én...
&lt;br /&gt;
&lt;i&gt;By the way&lt;/i&gt;, azt tudják, hogy miért 31 napos július meg augusztus is, miközben a február meg ilyen rövidke? Hát mert augusztust Augustus császárról nevezték el, egészen konkrétan ő maga nevezte át a nyilvánvalóan sokkal bénább Sextilius (update: helyesen: Sextilis) névről - viszont ez a hónap csak 30 napos volt, szemben a Julius caesarról elnevezett szomszéd Júliussal, ami meg 31, úgyhogy az amúgy is kicsit rövidebbre sikerült februárból (annak már úgy is mindegy) egy nap le lett csípve, és &lt;del&gt;Sextil&lt;/del&gt; augusztushoz adva. Hiába, no, &lt;a href="http://www.youtube.com/watch?v=AVZ-BOfC5fI"&gt;a szerénység&lt;/a&gt; gyakran együtt jár az ilyen pozíciókkal!
&lt;/p&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-3254898300286232662?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/3np4gdGh55g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/3254898300286232662/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/01/miert-pont-1753-01-01.html#comment-form" title="3 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3254898300286232662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/3254898300286232662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/3np4gdGh55g/miert-pont-1753-01-01.html" title="Miért pont 1753-01-01?" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://otperc.net/2010/01/miert-pont-1753-01-01.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUABR3ozcCp7ImA9WxBRFkw.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-7318052933064259302</id><published>2010-01-04T15:59:00.006+01:00</published><updated>2010-01-04T16:09:16.488+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-04T16:09:16.488+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gotchas" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Klasszikus (módú) szívás</title><content type="html">&lt;p&gt;
Ha egy webalkalmazásunkban szeretnénk a HTTP response-hoz saját header érték(ek)et fűzni, kézenfekvő&lt;i&gt;(nek tűnik)&lt;/i&gt; a megoldás: elérjük a HttpResponse példányunkat, azon van egy Headers kollekció, annak meg van Add metódusa:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
Response.Headers.Add(&lt;span class="str"&gt;"MyHeaderInfo"&lt;/span&gt;, &lt;span class="str"&gt;"XY"&lt;/span&gt;);&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;
Erre IIS 5 / 6 / 7 Classic Mode alatt egy PlatformNotSupportedException-t kapunk, merthogy &lt;i&gt;"This operation requires IIS integrated pipeline mode."&lt;/i&gt;. Mifene, classic módban nem tudunk headereket hozzáadni a response-hoz? Természetesen de, csak másképp:
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
Response.AddHeader(&lt;span class="str"&gt;"MyHeaderInfo"&lt;/span&gt;, &lt;span class="str"&gt;"XY"&lt;/span&gt;);&lt;/pre&gt;
Vagy használhatjuk az AppendHeader() metódust is, pont ugyanazt csinálja, mint az AddHeader (az AddHeader valójában egyszerűen csak továbbhív az AppendHeaderre, ami a valódi mágiát csinálja, &lt;a href="code://System.Web:2.0.0.0:b03f5f7f11d50a3a/System.Web.HttpResponse/AppendHeader(String,String)"&gt;érdemes megreflektorozni&lt;/a&gt;).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-7318052933064259302?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/-qTKz9CLRzA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/7318052933064259302/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2010/01/klasszikus-modu-szivas.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7318052933064259302?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/7318052933064259302?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/-qTKz9CLRzA/klasszikus-modu-szivas.html" title="Klasszikus (módú) szívás" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2010/01/klasszikus-modu-szivas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MMRnk7fCp7ImA9WxBSGE4.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-4699335806978128227</id><published>2009-12-26T14:27:00.006+01:00</published><updated>2009-12-26T14:51:27.704+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-26T14:51:27.704+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="private life" /><title>Community Powa</title><content type="html">&lt;p&gt;Kerestem fülbe dugható fülhallgatót. Szerencse, hogy az Interneten számos ár-összehasonlító oldal létezik, így a keresgélés jóval egyszerűbb - ráadásul a legtöbb helyen pontozni, kommentezni is lehet az egyes termékeket, így már vásárlás előtt teljes képet kaphat a megvásárolni kívánt portákáról. Találtam is egy elég szimpatikus darabot, a &lt;a href="http://www.argep.hu/product_380921.html"&gt;Sennheiser CX 300-as modelljét&lt;/a&gt;, nézzük, mit írnak róla!

&lt;blockquote&gt;
&lt;i&gt;"Ma vettem és elsőre letaglózott. ...10-es skálán 8-ast adnék neki, de így 5-ös skálán legyen 5-ös. Jó érték-arány, professzionális hangzás. Csak ajánlani tudom!"&lt;/i&gt;
&lt;/blockquote&gt;

Na, hát ez kiváló, bár a 10-es skálán 8-as eredményt ötös skálán ötössé konvertálni elég furcsa, lehet, hogy inkább egy másik értékelő véleményére kéne hallgatni. Nézzük mit ír a következő!

&lt;blockquote&gt;
&lt;i&gt;"Egy olcsóbb Panasonic inear-t szerettem volna leváltani vele. Nem sikerült. Annak ellenére, hogy Sennheiser, a hangja borzalmas, egyszerűen sérti a fület. Mindenféle EQ beállítással kipróbáltam, de egyik sem jött be. A közepei üvöltenek, a magas is sok, mélye pedig egyáltalán nincs. Nagyot csalódtam a gyártóban."&lt;/i&gt;
&lt;/blockquote&gt;

Ajaj, hát ezek szerint ez mégsem annyira tökéletes. De várjunk csak, nézzük mit írnak még:

&lt;blockquote&gt;
&lt;i&gt;"A legjobb! Ez előtt kb. 20-30 fülest kipróbáltam, de egyik se váltotta be a hozzá fűzött reményeket... Már fél éve használom a CX300-at és bátran kijelenthetem, hogy ez a legjobb ár/érték téren. Gyönyörűen szól! A 25Hz-es szinuszhullámtól, amit ráadtam, azt hittem, hogy fölrobbantja a fejem."&lt;/i&gt;
&lt;/blockquote&gt;

Hát akkor mégis elég jó lehet, bár itt megint számolni azoknak az embereknek a beszámíthatósági faktorával, akik 25Hz-es szinuszt hallgatnak.&lt;br /&gt;
Jobb lenne valami zenei műveltséggel bíró személy tapasztalataira... de hoppá, hát itt van!

&lt;blockquote&gt;
&lt;i&gt;"zenélek már 16 éve,és ugyan abszolút hallásom nincs,de tökéletes zenei relatív hallásom van,ilyen képességek birtokába mondom erről a fülesről hogy egy minőségi darab.csak akik a sok rosszon éltek előtte,azoknak ez most túl erős /gyenge lehet attól függ ogy előtte milyen fülesük volt. érdemes az eq-val próbálkozni,kiválló hangzást lehet elérni vele."&lt;/i&gt;
&lt;/blockquote&gt;

Na, hát jó ez az írástudók szerint is. Akkor most már biztos, hogy jó lesz. Na még egy véleményt elolvasok...

&lt;blockquote&gt;
&lt;i&gt;"Egyszerüen nem szól tisztán. Kár, hogy megvettem. Kásás és a magas az szörnyű. Próba kell mindenképpen mielött megveszed, mert ha valaki erre 16 év zenélés után rámondja, hogy minőségi, akkor tényleg megosztja rendesen az embereket. Az ilyen vélemény maximum egy utalás arra aki zenéhez értőnek tartja magát."&lt;/i&gt;
&lt;/blockquote&gt;

Hajjaj, akkor most mégsem?

&lt;blockquote&gt;
&lt;i&gt;"Kitűnő hangzás, kitűnő dinamika, kitűnő kivitelezés! Ezzel lehetne jellemezni a CX300-at! Bődületesen jól szól! Mindenkinek csak ajánlani tudom!"&lt;/i&gt;
&lt;/blockquote&gt;

De, jó ez, kitűnő!

&lt;blockquote&gt;
&lt;i&gt;"Nulla a cucc! Sajnálom, hogy megvettem. Ami ebből szól, azt ne nevezzük hangzásnak."&lt;/i&gt;
&lt;/blockquote&gt;

Jajj, nem. Mégsem. Vagy...?

&lt;blockquote&gt;&lt;i&gt;"A Sennheiser cx300 a legjobb ami valaha a fülemben volt!!! Leginkább a munkahelyemen használom a fülest, hogy "gyorsabban teljen az idő"."&lt;/i&gt;&lt;/blockquote&gt;

Na, akkor most jó ez...

&lt;blockquote&gt;
&lt;i&gt;"Egy hifi üzletben volt lehetőségem vásárlás előtt meghallgatni. Ezek után a vásárlás elmaradt!"&lt;/i&gt;
&lt;/blockquote&gt;

Nem, mégsem, vagy...?

&lt;/p&gt;
&lt;p&gt;
És így tovább, a végtelenségig. Műértők szakvéleményei, majd a műértők hozzá nem értését leleplező műértő írások, szépen, sorban, egymás alatt, a személyeskedő anyázás határmezsgyéjét még épp át nem lépve (amivel ez a fórum egyébként a kultúráltabbak közé pozícionálódik).&lt;br /&gt;
Ráadásul a kis füldugasz ára elég szép szórást mutat, 6.734 Ft-tól kerek 12.000 Ft-ig kapható, ami a következő, a széles nyilvánosság számára elérhető felületeken óhatatlanul felbukkanó kaszt, a &lt;i&gt;beavatottak&lt;/i&gt; számára olyan magas labda, amit nem lehet nem lecsapni. Megtudhatjuk, hogy ezt a modellt hamisítják, sok helyen a boltokban is hamisítványt kapni, 8000 alatt biztos, afölött meg ki tudja, hát ki, ki más tudná, mint a nagybetűs FÓRUMOZÓ, csak szét kell bontani a borítást, és lesz ott egy szám, ami ha négyessel kezdődik, akkor eredeti, ha hatos, akkor hamis, és mint ilyen, kerülendő, sz*r, értéktelen szemét.
&lt;/p&gt;
&lt;p&gt;
Végül az lett, hogy legutóbb, mikor a szokásos ünnepek előtti nagybevásárlást intéztem egy hyperben (fel kellett tölteni az égetettszesz-készleteket), leakasztottam a szögről egy Panasonic fülest, 1990 Ft, nem egy audiophile cucc, de a célnak megfelel, az &lt;a href="http://www.youtube.com/watch?v=49LWy8rzW6E"&gt;Asian Dub Foundation&lt;/a&gt; egész meggyőzően dörren meg rajta reggel a négyeshatoson.&lt;br /&gt;
Mi lett volna velem a Közösség nélkül? Valószínű egy háromszor (esetleg négyszer, ötször, vagy hatszor) ilyen drága fülest tömködnék reggelente a fülembe, aztán gondolkozhatnék erősen, hogy most amit hallok, az tetszik-e nekem, vagy sem.
&lt;/p&gt;
&lt;p&gt;
Community power, köszönöm!
&lt;/p&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-4699335806978128227?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/M2vx1U4YtJM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/4699335806978128227/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/community-powa.html#comment-form" title="10 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4699335806978128227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/4699335806978128227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/M2vx1U4YtJM/community-powa.html" title="Community Powa" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">10</thr:total><feedburner:origLink>http://otperc.net/2009/12/community-powa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BQ388eCp7ImA9WxBSEUk.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-1153961684605027134</id><published>2009-12-18T14:42:00.002+01:00</published><updated>2009-12-18T14:45:52.170+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-18T14:45:52.170+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="CLR" /><title>Kovariancia és kontravariancia C# 4.0-ban</title><content type="html">&lt;h4&gt;Miről beszélünk?&lt;/h4&gt;  &lt;p&gt;C#-ban egy referencia típusú változó mindig a saját típusára, vagy az abból leszármazott típusra mutathat. Ez teljesen transzparens, amikor egy object referencián meghívsz egy metódust, mindegy, hogy a referencia tényleg egy object-re, string-re, Kiskutya-ra mutat-e. Ezzel valószínűleg mindenki találkozott már az első &amp;quot;Objektum-orientált programozás&amp;quot; órán, valamint azóta kb. egycsilliárdszor.    &lt;br /&gt;Nevezzük ezt mondjuk &amp;quot;egyes számú szabály&amp;quot;-nak.&lt;/p&gt;  &lt;p&gt;Ha két típust (mondjuk T-t és U-t) egymáshoz hasonlítunk, az alábbi négy lehetőségből pontosan egy lesz igaz:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;T nagyobb, mint U (OOP terminológiával: T őse U-nak - a System.Object őse a System.String-nek, tehát az object nagyobb, mint a string) &lt;/li&gt;    &lt;li&gt;T kisebb, mint U (OOP terminológiával: T leszármazottja U-nak - a System.String a System.Object leszármazottja, tehát a string kisebb, mint az object) &lt;/li&gt;    &lt;li&gt;T egyenlő U-val (OOP terminológiával: T és U ugyanaz a típus) &lt;/li&gt;    &lt;li&gt;T-nek nincs kapcsolata U-val (OOP terminológiával: navajon?) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Vegyünk egy műveletet, ami a típusokkal mókol valamit, egy adott típusból egy másikat csinál valamilyen szabály alapján: T-ból T'-t, U-ból U'-t.&lt;/p&gt;  &lt;p&gt;Hogyha a T' ugyanolyan relációban lesz U'-vel (a fenti négyből), mint T volt U-val, akkor a művelet kovariáns. Ha a művelet megfordítja a relációt (pontosabban: a kisebbséget-nagyobbságot megfordítja, az egyenlőséget és a &amp;quot;közömbösséget&amp;quot; változatlanul hagyja), akkor a művelet kontravariáns.&lt;/p&gt;  &lt;h4&gt;Érthetetlen, ugye? Nézzünk egy példát!&lt;/h4&gt;  &lt;p&gt;Adott két típus, mondjuk a System.Object és a System.String (közülük az object a &amp;quot;nagyobb&amp;quot;). Most vegyünk egy &amp;quot;műveletet&amp;quot;, ami csinál valamit a típusokkal. Ilyen művelet például a &amp;quot;képezzünk T tömböt&amp;quot;, vagy a &amp;quot;képezzünk T listát&amp;quot;. Lesz tehát object[] (aka. T'), string[] (aka. U'), List&amp;lt;object&amp;gt; (legyen mondjuk T''), List&amp;lt;string&amp;gt; (logikusan U'') típusunk.&lt;/p&gt;  &lt;p&gt;Milyen viszonban vannak ezek a típusok egymással? Az object[] nagyobb, mint a string[]? Hát nézzük meg, az egyes számú szabály értelmében, ha az, akkor értékül lehet neki adni:&lt;/p&gt;  &lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// C# 1.0 kód&lt;/span&gt;
&lt;span class="kwrd"&gt;string&lt;/span&gt;[] stringArray = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt; };
&lt;span class="kwrd"&gt;object&lt;/span&gt;[] objectArray = stringArray;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;A C#-ban a tömbképzés már a nyelv legelső verziója óta kovariáns.&lt;/p&gt;

&lt;p&gt;És a List&amp;lt;string&amp;gt; castolható List&amp;lt;object&amp;gt;-té?&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// C# 2.0 kód&lt;/span&gt;
var stringList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; { &lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt; };
var objectList = (List&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt;)stringList; // ez nem fordul!&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Erre bizony még a nyelv 3.0-ás változatában is egy &amp;quot;Cannot convert type 'System.Collections.Generic.List&amp;lt;string&amp;gt;' to 'System.Collections.Generic.List&amp;lt;object&amp;gt;'&amp;quot; a fordító válasza.&lt;/p&gt;

&lt;h4&gt;Veszélyes utakon&lt;/h4&gt;

&lt;p&gt;De vajon ha a tömböknél meg tudták oldani a dolgot már az 1.0-ban, akkor miért nem ment a genericnél a másodiknál? &lt;a href="http://blogs.msdn.com/ericlippert/about.aspx"&gt;Eric Lippert&lt;/a&gt; azt mondja erről: &amp;quot;&lt;em&gt;az a mód, ahogy a C# támogatja a tömböknél a kovarianciát, &lt;/em&gt;broken&lt;em&gt;. 
    &lt;br /&gt;Azért került be a CLR-be, mert a CLR tervezői képessé akarták tenni azt a Java(-szerű) nyelvek támogatására, és ehhez szükség volt rá. Aztán mi beraktuk a C#-ba, ha már a CLR-ben bent volt. Sokat vitatkoztunk ezen a döntésen, és ma már nem örülök neki túlságosan, hogy így alakult, de most már nem sok mindent tudunk csinálni.&lt;/em&gt;&amp;quot; &lt;/p&gt;

&lt;p&gt;Miről beszél Lippert? Lássunk egy példakódot:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetDataMethod(&lt;span class="kwrd"&gt;object&lt;/span&gt;[] objectArrayParam)
{
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var item &lt;span class="kwrd"&gt;in&lt;/span&gt; objectArrayParam)
    {
        Console.WriteLine(item);
    }
}

&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetDataMethod(&lt;span class="kwrd"&gt;object&lt;/span&gt;[] objectArrayParam)
{
    objectArrayParam[0] = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;();
}

&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt;[] stringArray = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt; };
    &lt;span class="kwrd"&gt;object&lt;/span&gt;[] objectArray = stringArray;

    GetDataMethod(objectArray);
    SetDataMethod(objectArray);
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Az első metódus lefut, de a második futtatásakor egy &amp;quot;ArrayTypeMismatchException: Attempted to access an element as a type incompatible with the array.&amp;quot; üzenetet kapunk. A hangsúly a futtatásakoron van: sikerült egy erősen típusos nyelvbe egy olyan konstrukciót beemelni, ami remek lehetőséget ad a compile-time típusbiztosság-ellenőrzés kikerülésére - amivel pedig megnyílnak a pokol kapui.&lt;/p&gt;

&lt;h4&gt;A helyes út&lt;/h4&gt;

&lt;p&gt;A C# 2.0-tól van olyan variancia-támogatás is a nyelvben, ami nem “&lt;em&gt;broken&lt;/em&gt;”, méghozzá a generikus delegate-ek:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetString()
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;http://otperc.net&amp;quot;&lt;/span&gt;;
}

&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
{
    Func&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt; functionThatReturnsObject;
    functionThatReturnsObject = GetString;
    &lt;span class="kwrd"&gt;object&lt;/span&gt; o = functionThatReturnsObject();
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;A Func&amp;lt;T&amp;gt; egy T típust visszaadó metódust reprezentál - tehát a Func&amp;lt;object&amp;gt; egy olyat, ami object-et ad vissza. Ez a &amp;quot;metódusreferencia&amp;quot; bátran mutathat olyan metódusra, ami string-et ad vissza. Mi baj lehet? Semmi. A hívó ugy is object-et vár, nem érheti meglepetés. Bármi olyanra mutathatunk, ami specializáltabb, mint mi (az object-es példa esetében praktikusan bármire). Visszafele viszont nem megy a dolog, ha a hívó string-et vár, nem adhatunk object-et.&lt;/p&gt;

&lt;p&gt;A generikus delegate-ek a castolása visszaadott típusokra nézve kovariáns.&lt;/p&gt;

&lt;p&gt;Nézzük a másik esetet, mikor a típusparaméter nem a visszaadott típust, hanem a paraméter típusát mondja meg. Az Action&amp;lt;T&amp;gt; delegate egy visszatérési érték nélküli, egy T típusú paramétert váró metódust reprezentál. Ha egy metódus mondjuk object-et vár, bátran elérhetjük egy olyan Action-ön keresztül, ami string-et (vagy bármi már specializáltabbat) vár, mert az &amp;quot;alatta lévő&amp;quot;, object-et váró metódus simán meg fogja enni:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ConsumeObject(&lt;span class="kwrd"&gt;object&lt;/span&gt; obj)
{
    Console.WriteLine(obj);
}

&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
{
    Action&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; methodThatConsumesString = ConsumeObject;
    methodThatConsumesString(&lt;span class="str"&gt;&amp;quot;http://otperc.net&amp;quot;&lt;/span&gt;);
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;A generikus delegate-ek castolása a paraméterek típusára nézve kontravariáns - a típusbiztosság pedig mindkét esetben compile-time ellenőrzött.&lt;/p&gt;

&lt;h4&gt;Variancia a C# 4.0-ban&lt;/h4&gt;

&lt;p&gt;Eddig láttunk példát a kontra- és kovarianciára is, annak jó és kevésbé jó implementációjára tömböknél, delegate-eknél. Egy valamit nem láttunk általános generikus típusoknál, pl. egy List&amp;lt;T&amp;gt;-nél a variancia használatára. Azért nem láttunk, mert nincs. C# 3.0-ig nem volt lehetőségünk mondjuk egy List&amp;lt;string&amp;gt;-et List&amp;lt;object&amp;gt;-té castolni - C# 4.0-tól majd lesz. Bizonyos esetekben.&lt;/p&gt;

&lt;p&gt;Nem meglepő, hogy ezt a fajta támogatást a nyelvbe &amp;quot;nem-broken&amp;quot; módon igyekeznek behozni - a klasszikus kecskés-káposztás felállásban, miszerint használhassunk kontra- vagy kovariáns hozzárendeléseket ott, ahol azok működőképesek és hasznosak, de maradjon meg a fordításidejű típusbiztosság-ellenőrzés is. Hogy tudjuk szétszeparálni az működő eseteket a nem-működőktől? Nézzük meg újra a legelső példakódunkat:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;GetDataMethod(objectArray); &lt;span class="rem"&gt;// ez a metódus lefut&lt;/span&gt;
SetDataMethod(objectArray); // ez ArrayTypeMismatchException-t dob&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Miért tud futni az első, és miért nem a második? Mi a különbség? 
  &lt;br /&gt;Mondjuk első közelítésben az &amp;quot;adatáramlás iránya&amp;quot;. Az elsőben csak iterálunk, &amp;quot;kiveszünk&amp;quot; adatokat, míg a másodikban &amp;quot;berakni&amp;quot; próbálunk.&lt;/p&gt;

&lt;p&gt;A delegate-es példánál is, a visszatérési érték típusa (&amp;quot;kimenő irány&amp;quot;) kovariáns - ami X típust ad vissza, az visszaadhat X-et, vagy bármi specializáltabbat. A másik irányba meg fordítva.&lt;/p&gt;

&lt;p&gt;A C# 4.0-ba két új kulcsszó került be a variancia támogatására: az in és az out varianciamódosítót (jó, egyikük kulcsszó-pályafutásának sem ez a kezdete, de ez most egy új szerepkör). Ezzel a két kulcsszóval generikus interface-ek típusparamétereit jelölhetjük meg, mint &amp;quot;bemeneti&amp;quot; (kontravariáns) vagy &amp;quot;kimeneti&amp;quot; (kovariáns) paraméter.&lt;/p&gt;

&lt;p&gt;Egy példa talán érthetőbbé teszi a dolgot: vegyük például az IEnumerable&amp;lt;T&amp;gt; generikus interfészt. Egy ilyen osztályból T típusú elemek &amp;quot;jönnek ki&amp;quot; - tehát T-nél &amp;quot;nagyobb&amp;quot;, általánosabb elemeket is kivehetünk. Egy IEnumerable&amp;lt;string&amp;gt; vígan tud IEnumerable&amp;lt;object&amp;gt;-ként is viselkedni. Bajt nem csinálhatunk, mert &amp;quot;befele&amp;quot; nem megy adat, nem fordulhat elő, hogy egy, magát IEnumerable&amp;lt;object&amp;gt;-nek mutató IEnumerable&amp;lt;string&amp;gt;-be egy int típusú adatot rakunk, merthogy az object megbírja azt is.&lt;/p&gt;

&lt;p&gt;A .NET Framework 4.0-ban ennek az interfésznek így néz ki a definíciója:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IEnumerable&amp;lt;&lt;span class="kwrd"&gt;out&lt;/span&gt; T&amp;gt; : IEnumerable
{
    IEnumerator&amp;lt;T&amp;gt; GetEnumerator();
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Azzal, hogy ki lett rakva az out, a T paraméter kovariánssá vált:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// C# 4.0 kód:&lt;/span&gt;
IEnumerable&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; enumerableOfString =
    &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;http://&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;otperc&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;.net&amp;quot;&lt;/span&gt; };
IEnumerable&amp;lt;&lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt; enumerableOfObject = enumerableOfString;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Annak pedig, hogy az out-ot ki lehetett rakni, egy előfeltétele volt: a T csak a &amp;quot;kimeneti oldalon&amp;quot; szerepelt az interfész definíciójában. 
  &lt;br /&gt;Most nézzünk meg egy másik interfészt:&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IComparer&amp;lt;&lt;span class="kwrd"&gt;in&lt;/span&gt; T&amp;gt;
{
    &lt;span class="kwrd"&gt;int&lt;/span&gt; Compare(T x, T y);
}&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Itt most az &amp;quot;in&amp;quot; módosítót használták, a T paramétert kontravariánssá téve - talán most már nem túl meglepő a felfedezés, hogy a T csak bemenő paraméterként használt. T helyére bepasszol T, vagy bámi nála specializáltabb: egy comparer, ami össze tud hasonlítani két object-et, két stringet is össze tud.&lt;/p&gt;

&lt;p&gt;Természetesen az in és az out típusparaméterek használata nem csak a framework fejlesztők kiváltsága, mi is használhatjuk őket a saját &lt;strong&gt;interfészeinkben&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Osztályokon nem, azt egy &amp;quot;&lt;em&gt;Invalid variance modifier. Only interface and delegate type parameters can be specified as variant.&lt;/em&gt;&amp;quot; üzenettel jutalmazza a fordító. A variancia ugyanis műveleteken értelmezett, a műveleteket pedig leginkább a delegate-ek és az interfészek írják le. Az List&amp;lt;T&amp;gt; típusparaméterére nem rakhattak ilyen módosítót, mert a T ki- és bemenő oldalon is használt. Viszont az List&amp;lt;T&amp;gt; egyben IEnumerable&amp;lt;T&amp;gt; is (illetve IEnumerable&amp;lt;out T&amp;gt;), úgyhogy ha &amp;quot;azt az arcát mutatja&amp;quot;, akkor használhatjuk úgy.&lt;/p&gt;

&lt;p&gt;Szintén ellenőrzi a fordító, hogy ha in vagy out varianciamódosítót használsz, akkor a típusparamétered tényleg csak a megfelelő helyen bukkanjon fel, out paramétert bemenőként használva &amp;quot;&lt;em&gt;Invalid variance: The type parameter 'T' must be contravariantly valid on '&amp;lt;metódusnév&amp;gt;'. 'T' is covariant&lt;/em&gt;.&amp;quot; üzenetet kapunk, in-t kimenőként használva pedig &amp;quot;&lt;em&gt;Invalid variance: The type parameter 'T' must be covariantly valid on '&amp;lt;metódusnév&amp;gt;'. 'T' is contravariant&lt;/em&gt;.&amp;quot;-et.&lt;/p&gt;

&lt;h4&gt;A teljes és kendőzetlen igazság&lt;/h4&gt;

&lt;p&gt;Be kell vallanom: a fenti postból sok minden nem igaz. Illetve igaz, csak nem úgy. Néhol egyszerűsítésekkel éltem, pl. a “kisebbség-nagyobbság”, “hozzárendelhetőség” és a “leszármazás” fogalmait illene jobban tisztába rakni. Belátható, hogy a kettő nem ugyanaz, mert bár fentebb láttuk, hogy az IEnumerable&amp;lt;object&amp;gt;-nek símán értékül adhatjuk az IEnumerable&amp;lt;string&amp;gt;-et, ez az “egyes számú szabály” értelmében azt is jelenti, hogy az IEnumerable&amp;lt;string&amp;gt; öröklési láncában (bocs, megint pongyola vagyok, interfészről beszélünk: öröklési fájában) valahol szerepelnie kéne az IEnumerable&amp;lt;object&amp;gt;-nek. Egyet biztosíthatok: nem szerepel.&lt;/p&gt;

&lt;p&gt;Ha ezek a részletek is a helyükön lennének, akkor korrekt lenne az írás, viszont érthetetlen. A neten rengeteg anyag fellelhető, but I won’t bring it to you – you have to &lt;em&gt;bing&lt;/em&gt; it for yourself. :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-1153961684605027134?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/o3J5YeS6kKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/1153961684605027134/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/covariance-and-contravariance-in-c-40.html#comment-form" title="0 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/1153961684605027134?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/1153961684605027134?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/o3J5YeS6kKI/covariance-and-contravariance-in-c-40.html" title="Kovariancia és kontravariancia C# 4.0-ban" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://otperc.net/2009/12/covariance-and-contravariance-in-c-40.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUAR3czeyp7ImA9WxBTFEs.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-6968191924207301590</id><published>2009-12-10T16:47:00.006+01:00</published><updated>2009-12-10T17:24:06.983+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T17:24:06.983+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tips'N'Tricks" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Összes tábla összes adatának törlése SQL Serverben</title><content type="html">&lt;p&gt;
Fejleszési-tesztelési időben előfordul, hogy szeretnénk "nyomni egy resetet" az adatbázisunkon: a séma marad, de ki szeretnék dobni minden adatot. TRUNCATE-eljünk mindent!
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="rem"&gt;-- disable all constraints&lt;/span&gt;
&lt;span class="kwrd"&gt;EXEC&lt;/span&gt; sp_MSForEachTable "&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; ? &lt;span class="kwrd"&gt;NOCHECK&lt;/span&gt; &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="kwrd"&gt;all&lt;/span&gt;"

&lt;span class="rem"&gt;-- delete data in all tables&lt;/span&gt;
&lt;span class="kwrd"&gt;EXEC&lt;/span&gt; sp_MSForEachTable "&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; ?"

&lt;span class="rem"&gt;-- enable all constraints&lt;/span&gt;
&lt;span class="kwrd"&gt;EXEC&lt;/span&gt; sp_MSForEachTable "&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; ? &lt;span class="kwrd"&gt;WITH&lt;/span&gt; &lt;span class="kwrd"&gt;CHECK&lt;/span&gt; &lt;span class="kwrd"&gt;CHECK&lt;/span&gt; &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="kwrd"&gt;all&lt;/span&gt;"
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
A középső sor a tényleges truncate, a kezdő-záró ALTER TABLE-ök csak a kényszerek betartatását kapcsolják ki, majd vissza - így a FOREIGN KEY-ek sem akadályozzák meg az adatok törlését.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
az eredeti script és további bölcsességek a témában:&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/155246/how-do-you-truncate-all-tables-in-a-database-using-tsql"&gt;
How do you truncate all tables in a database using TSQL? @ StackOverflow&lt;/a&gt;&lt;br/&gt;
&lt;br /&gt;
az &lt;tt&gt;sp_MSforeachtable&lt;/tt&gt; tárolt eljárás további hasznos felhasználási lehetőségei:&lt;br /&gt;
&lt;a href="http://www.sqlservercurry.com/2009/04/8-common-uses-of-undocumented-stored.html"&gt;8 Common Uses of the undocumented Stored Procedure sp_MSforeachtable @ SQLServerCurry&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-6968191924207301590?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/0tlkDD37big" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/6968191924207301590/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/truncate-all-tables-sql-server.html#comment-form" title="2 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/6968191924207301590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/6968191924207301590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/0tlkDD37big/truncate-all-tables-sql-server.html" title="Összes tábla összes adatának törlése SQL Serverben" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://otperc.net/2009/12/truncate-all-tables-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4BQnw5fSp7ImA9WxBTEk0.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-9092359292281725556</id><published>2009-12-07T17:10:00.001+01:00</published><updated>2009-12-07T17:22:33.225+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T17:22:33.225+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title>Forráskód másolása HTML-ként Visual Studio-ból</title><content type="html">&lt;p&gt;
Ha valamilyen technikai irományt (dokumentációt, blogbejegyzést, stb...) készítünk, gyakran lehet szükség arra, hogy abba forráskódot illesszünk be. Ez még nem agysebészet, Visual Studióban kódrészlet kijelöl, CTRL+C, CTRL+V, és kész, átmegy a szöveg.&lt;br /&gt;
Egy dolog viszont nem megy át: az a gyönyörű syntax highlight (na jó, Word-be átmegy). Pedig a Studio kódkiemelős funkciója remek, jó lenne azt úgy például HTML-ként kiemelni.
&lt;/p&gt;
&lt;p&gt;
Pont ezt tudja a CopySourceAsHtml nevű Visual Studio add-on, amit ingyenesen le lehet tölteni a &lt;a href="http://copysourceashtml.codeplex.com/"&gt;http://copysourceashtml.codeplex.com/&lt;/a&gt;-ról.&lt;br /&gt;
A 3.0-ás verzióban már egy .msi installert kapunk, next-next-finish telepítéssel. Utána egy egy VS újraindítás, és a File, Edit menükben, illetve a kijelölt szöveg context menüjében egy új elem bukkan fel: a Save/Copy as HTML.&lt;br /&gt;
Ha már vannak saját CSS stílusaink, azok használatára is beidomíthatjuk.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-9092359292281725556?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/ueugGcL4mNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/9092359292281725556/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/copy-source-html-visual-studio.html#comment-form" title="2 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/9092359292281725556?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/9092359292281725556?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/ueugGcL4mNI/copy-source-html-visual-studio.html" title="Forráskód másolása HTML-ként Visual Studio-ból" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://otperc.net/2009/12/copy-source-html-visual-studio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MEQnc_eip7ImA9WxBTEE0.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-8620802403831214269</id><published>2009-12-05T08:00:00.002+01:00</published><updated>2009-12-05T11:36:43.942+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-05T11:36:43.942+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Nullérték-vizsgálat egyszerűen</title><content type="html">&lt;p&gt;
Eredeti (Java-s) ötlet itt: &lt;a href="http://cesjava.freeblog.hu/archives/2009/10/13/a_NUllPointerException_transzparens_kezelese/"&gt;http://cesjava.freeblog.hu/archives/2009/10/13/a_NUllPointerException_transzparens_kezelese/&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Saját továbbgondolás (C#):
&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;
&lt;p style="margin: 0px;"&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: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;NullReferenceCheckExtensions&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; CheckIfNull&amp;lt;T&amp;gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; T instance)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;where&lt;/span&gt; T : &lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (instance == &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; argumentInfo = TryGetArgumentInfo();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (argumentInfo == &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&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; argumentInfo = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;&amp;quot;An instance of type '{0}'.&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(T).FullName);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ArgumentNullException&lt;/span&gt;(argumentInfo);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; TryGetArgumentInfo()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; st = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.Diagnostics.&lt;span style="color: #2b91af;"&gt;StackTrace&lt;/span&gt;(&lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; callerFrame = st.GetFrame(2);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; fileName = callerFrame.GetFileName();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; fullSource = System.IO.&lt;span style="color: #2b91af;"&gt;File&lt;/span&gt;.ReadAllLines(fileName);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; info = fullSource[callerFrame.GetFileLineNumber() - 1].Trim();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; info;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Használat:
&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; MyMethod(&lt;span style="color: blue;"&gt;string&lt;/span&gt; name, &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt; uri)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name.CheckIfNull();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uri.CheckIfNull();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-8620802403831214269?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/vewzikieb5k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/8620802403831214269/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/null-checking-of-method-arguments-in-c.html#comment-form" title="2 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8620802403831214269?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/8620802403831214269?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/vewzikieb5k/null-checking-of-method-arguments-in-c.html" title="Nullérték-vizsgálat egyszerűen" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://otperc.net/2009/12/null-checking-of-method-arguments-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcDQXw6fSp7ImA9WxNaGU8.&quot;"><id>tag:blogger.com,1999:blog-72294588039662900.post-6647567195559445957</id><published>2009-12-04T07:50:00.005+01:00</published><updated>2009-12-04T11:37:50.215+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-04T11:37:50.215+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="CLR" /><title>Osszunk nullával!</title><content type="html">&lt;div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; one = 1;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; zero = 0;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; x = one / zero;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;DivideByZeroException&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;&amp;quot;Csak hiszed...&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;&amp;quot;&lt;a href="http://www.blackwasp.co.uk/CSharpInfinity.aspx"&gt;http://www.blackwasp.co.uk/CSharpInfinity.aspx&lt;/a&gt;&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/72294588039662900-6647567195559445957?l=otperc.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OtPercDotnet/~4/SLx5Fo_AtFs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://otperc.net/feeds/6647567195559445957/comments/default" title="Megjegyzések küldése" /><link rel="replies" type="text/html" href="http://otperc.net/2009/12/c-sharp-infinity-double.html#comment-form" title="1 megjegyzés" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/6647567195559445957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/72294588039662900/posts/default/6647567195559445957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/OtPercDotnet/~3/SLx5Fo_AtFs/c-sharp-infinity-double.html" title="Osszunk nullával!" /><author><name>Molnár Gergő</name><uri>http://www.blogger.com/profile/05139074877599679722</uri><email>gergo.molnar@otperc.net</email><gd:extendedProperty name="OpenSocialUserId" value="15966951835176790603" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://otperc.net/2009/12/c-sharp-infinity-double.html</feedburner:origLink></entry></feed>
