<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'Tipps'</title><link>http://www.aspnetzone.de/search/SearchResults.aspx?o=DateDescending&amp;tag=Tipps&amp;orTags=0</link><description>Search results matching tag 'Tipps'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Paypal Spenden Button in ASP.NET einf&amp;#252;gen</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2012/12/06/paypal-spenden-button-in-asp-net-einf-gen.aspx</link><pubDate>Thu, 06 Dec 2012 17:59:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:224809</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Ich wollte einen Paypal Spenden Button auf der &lt;A href="http://lightcore.ch/"&gt;LightCore&lt;/A&gt; Seite einzufügen, doch ein Button mit komplettem Formular-Tag das von Paypal geliefert wird ist schlecht zu nutzen.&lt;BR&gt;In einen &lt;A href="http://www.devtheweb.net/blog/2010/01/21/how-to-integrate-paypal-donate-button-into-asp-net-page/"&gt;Blog&lt;/A&gt; fand ich ein Beispiel, wie ein Spenden Button per Link eingefügt werden kann, per GET also.&lt;BR&gt;&lt;BR&gt;Zuerst muss ein Button bei Paypal erstellt werden, damit die ID des Buttons verfügbar ist.&lt;BR&gt;&lt;BR&gt;Im folgenden Code dann nur noch die ID des Buttons durch die von Paypal ersetzen èt voila.&lt;BR&gt;&lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;a&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;target&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="_blank"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=ButtonIDHierErsetzen"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;Spende an Produkt XYZ&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;a&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;BR&gt;&lt;BR&gt;Kurz und schmerzlos, vielleicht kann es jemand gebrauchen.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Office 2010 installiert und Visual Studio 2008 friert ein?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2010/06/20/office-2010-installiert-und-visual-studio-2008-friert-ein.aspx</link><pubDate>Sun, 20 Jun 2010 20:38:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:217730</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Nebenbei habe ich letztens Office 2010 installiert.&lt;BR&gt;Als ich dann wieder einmal Visual Studio 2008 benutzte, blieb die Anwendung im ASPX-Editor komplett hängen.&lt;/P&gt;
&lt;P&gt;Es musste der Prozess abgeschossen werden, um VS überhaupt beenden zu können.&lt;BR&gt;Mein Verdacht lag zuerst bei Resharper, was sich dann aber als falsch herausgestellt hat.&lt;/P&gt;
&lt;P&gt;Bei mir hat die Lösung mit dem Reparieren von den "Web Authoring Components" geholfen:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/b/webdevtools/archive/2010/04/19/upgrade-or-uninstall-of-office-2007-might-cause-vs-2008-web-designer-to-hang.aspx"&gt;http://blogs.msdn.com/b/webdevtools/archive/2010/04/19/upgrade-or-uninstall-of-office-2007-might-cause-vs-2008-web-designer-to-hang.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>InternalsVisibleToAttribute und signierte Assemblies: So funktionierts garantiert.</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/12/04/internalsvisibletoattribute-und-signierte-assemblies-so-funktionierts-garantiert.aspx</link><pubDate>Fri, 04 Dec 2009 15:46:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:214947</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Stellt euch vor, ihr habt zwei Assemblies:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;MyProject.Core 
&lt;LI&gt;MyProject.Core.Tests &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Im Core-Projekt gibt es Typen, die nicht öffentlich gemacht werden sollten, allerdings für die UnitTests zugänglich sein sollen. &lt;BR&gt;Nun, das ist ein kleines Problem, wenn man das Attribut “InternalsVisibleTo” kennt, mithilfe folgender Dekleration in der &lt;STRONG&gt;AssemblyInfo.cs des MyProject.Core-Projekts&lt;/STRONG&gt; kann dies einfach erledigt werden:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;[assembly: InternalsVisibleTo("MyProject.Core.Tests”)]&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;DIV class=Quotes&gt;&lt;BR =&gt;Das macht sogar sehr viel Sinn, denn sonst können Kollisionen und Verwechslungen der Extensionmethods beim Endbenutzer vorkommen.&lt;/DIV&gt;
&lt;P&gt;Soweit, so gut. Die Typen der MyProject.Core-Assembly sind jetzt in der MyProject.Core.Tests-Assembly sichtbar. &lt;BR&gt;Müssen die Projekte jedoch signiert sein, kommt es zu einem grösseren Problem.&lt;/P&gt;
&lt;P&gt;In &lt;A href="http://www.sturmnet.org/blog/2005/05/10/internalsvisibleto-sn"&gt;mehreren&lt;/A&gt; Blogs sind die nötigen Schritte &lt;A href="http://weblogs.asp.net/bhouse/archive/2006/04/17/443100.aspx"&gt;beschrieben&lt;/A&gt;, &lt;U&gt;jedoch werden da wichtige Punkte nicht genannt&lt;/U&gt;, die einem zur Verzweiflung treiben können. &lt;BR&gt;Die sind wie folgt:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Alle involvierten Assemblies müssen signiert werden. 
&lt;LI&gt;Der PublicKey muss vom Projekt bezogen werden, bei dem die Internals sichtbar werden sollen, in unserem Fall also das MyProject.Core.Tests-Projekt. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Nach einer weiteren Suche bin ich schlussendlich auf einem (selbsternannten) Newbie-Blog fündig geworden. &lt;BR&gt;Noch später sties ich dann auf die folgende Anleitung, die eigentlich alles beinhaltet, sodass ich nicht alles im Detail niederschreiben muss, trotzdem die wichtigen Punkte nennen kann und vorallem die Lösung wieder einmal finde:&lt;/P&gt;
&lt;P&gt;Also, beachtet die oben stehenden zwei Punkte und haltet euch an folgende Anleitung:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx href="http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx"&gt;http://statestreetgang.net/post/2008/04/InternalsVisibleToAttribute-and-Strong-Named-Assemblies-Step-by-Step.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>Generierung der designer.cs / vb Datei forcieren oder “Der Name ControlXYZ ist im aktuellen Kontext nicht vorhanden</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/03/generierung-der-designer-cs-vb-datei-forcieren-oder-der-name-controlxyz-ist-im-aktuellen-kontext-nicht-vorhanden.aspx</link><pubDate>Thu, 03 Sep 2009 17:34:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212767</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Wenn eine ASPX- / ASCX-Datei ausserhalb vom Visual Studio Editor geändert wird, bekommt das der Designer nicht mit. &lt;BR&gt;Das Updaten der &amp;lt;Dateiname&amp;gt;.&amp;lt;Erweiterung&amp;gt;.designer.cs geschieht nicht sehr häufig und nur bei bestimmten Fällen.&lt;/P&gt;
&lt;P&gt;So kann es gut sehr gut sein, dass folgende Fehlermeldung beim Kompilieren erscheint:&lt;/P&gt;
&lt;DIV class=Error&gt;The name ‘ControlXYZ’ does not exists in the current context&lt;/DIV&gt;
&lt;P&gt;bzw.&lt;/P&gt;
&lt;DIV class=Error&gt;Der Name ControlXYZ ist im aktuellen Kontext nicht vorhanden&lt;/DIV&gt;
&lt;P&gt;Um die &lt;STRONG&gt;Neugenerierung&lt;/STRONG&gt; der Designer-Datei &lt;STRONG&gt;zu erzwingen&lt;/STRONG&gt;, kann die ASPX- / ASCX- Datei im Designer geöffnet werden, oder eine Eigenschaft hinzugefügt / geändert werden.&lt;/P&gt;
&lt;P&gt;Wenn das nichts nützt (Danke an &lt;A href="http://www.aspnetzone.de/blogs/stefanfalz/"&gt;Stefan&lt;/A&gt;):&lt;/P&gt;
&lt;DIV class=Quotes&gt;
&lt;P&gt;Leider funktioniert das aber lange nicht immer. Ich hab das gerade bei größeren Projekten (meist dann, wenn man in VS ein Control kopiert und umbenennt (inkl. Klassenname natürlich) öfter mal. Schon ein paar mal half schlußendlich nur das Löschen der Datei in VS und das erneute Erstellen. Reines Drag&amp;amp;Drop in das VS Projekt hinein half da auch nciht.&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Mehr Details zu diesem Verhalten gibt es in folgendem Posting:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://social.msdn.microsoft.com/Forums/en-US/csharpide/thread/128202d7-5ecb-4921-8ac3-e173d4824235"&gt;Forcing regeneration of the designer.cs file&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>LINQ: Any, anyone? Range oder Repeat?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/linq-any-anyone-range-oder-repeat.aspx</link><pubDate>Tue, 01 Sep 2009 16:10:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212663</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Mit &lt;A href="http://de.wikipedia.org/wiki/LINQ"&gt;LINQ&lt;/A&gt; sind unzählige Erweiterungsmethoden für &lt;A href="http://msdn.microsoft.com/de-de/library/9eekhta0.aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/A&gt; hinzugekommen, die auch ausserhalb von LINQ Abfragen sehr nützlich sein können.&lt;/P&gt;
&lt;P&gt;Damit ich mir das merke und ihr evt. noch was neues kennenlernt, möchte ich zwei kurz vorstellen:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/de-de/library/system.linq.enumerable.any.aspx"&gt;Enumerable.Any()&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Kommt euch Code wie der folgende bekannt vor?&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(addresses.Count &amp;gt; 0) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// … &lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;oder&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(addresses.Count == 0) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// … &lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Das kann jetzt folgendermassen umgeschrieben werden:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(addresses.Any()) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// … &lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;und&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(!addresses.Any()) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// … &lt;/span&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Die Implementation der Any()-Methode holt sich den Enumerator der Auflistung und versucht den ersten Eintrag zu holen, wenn das klappt gibt sie true zurück, ansonsten false.&lt;/P&gt;
&lt;P&gt;Wenn Any() true zurückliefert, heisst das also, es ist mindestens ein Element vorhanden.&lt;/P&gt;
&lt;P&gt;PS: Darüber hinaus gibt es auch noch eine &lt;A href="http://msdn.microsoft.com/en-us/library/bb534972.aspx"&gt;zweite Überladung&lt;/A&gt;, der man Funktion einspeisen kann (Anonyme Methode, Lambda Ausdruck, …). Diese bestimmt dann, ob es mindestens ein Element hat, bei dem die Funktion true zurückliefert. &lt;BR&gt;Die Funktion nimmt ein Element vom Typ TSource entgegen und gibt einen bool zurück.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx"&gt;Enumerable.Range()&lt;/A&gt; und &lt;STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb348899.aspx"&gt;Enumerable.Repeat()&lt;/A&gt;&lt;/STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Schon mal Testdaten benötigt, oder eine Liste von Zahlen die dann durcheinandergewürfelt werden? &lt;BR&gt;Das schreibt man im einfachsten Fall dann in etwa so:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;List&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt; numbers &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt;(); &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;for&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; i=1; i &amp;lt;= 100; i++) &lt;br /&gt;{ &lt;br /&gt;    numbers.Add(i); &lt;br /&gt;} &lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// …&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Mit Enumerable.Range() geht das viel einfacher:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;var numbers &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Enumerable.Range(1, 100);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// …&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Mit LINQ lässt sich ganz einfach eine gemischte Liste von Zahlen erstellen, zwei Zeilen braucht es dazu:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Random random &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Random(); &lt;br /&gt;var numbers &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Enumerable.Range(1, 100).OrderBy&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;&amp;gt;(random.Next);&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Hier noch ein kleiner Hinweis: Um eine gleichmässige Verteilung einer solchen Liste zu erhalten, sollte ein Algorithmus wie bspw. &lt;A href="http://www.mycsharp.de/wbb2/thread.php?postid=198217#post198217"&gt;hier&lt;/A&gt; benutzt werden.&lt;/P&gt;
&lt;P&gt;An Enumerable.Repeat() hingegen kann im ersten Parameter eine Instanz übergeben werden, oder auch ein einfacher Wertetyp wie bspw. eine Zahl und eine Anzahl, wie häufig dieser Wert wiederholt werden soll. &lt;BR&gt;Schlussendlich bekommt man eine Auflistung zurück, das wars.&lt;/P&gt;</description></item><item><title>Alles var – oder nicht?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/09/01/alles-var-oder-nicht.aspx</link><pubDate>Tue, 01 Sep 2009 07:37:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212562</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Am 13. Oktober 2008 haben &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt; und ich unter dem Titel &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/10/13/noch-fragen-roden-ja-bucher.aspx"&gt;Noch Fragen, Roden? Ja, Bucher!&lt;/A&gt; angekündigt, jeweils zum ersten eines jeden Monats einen Kommentar zu einem vorab gemeinsam gewählten Thema verfassen zu wollen. Bisher sind in dieser Reihe folgende Kommentare erschienen: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;1. August 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/08/01/c-oder-vb-welche-sprache-soll-ich-lernen.aspx"&gt;C# oder VB: Welche Sprache soll ich lernen?&lt;/A&gt; 
&lt;LI&gt;1. Juli 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/01/prim-rschl-ssel-guid-vs-identity.aspx"&gt;Primärschlüssel: GUID vs Identity&lt;/A&gt; 
&lt;LI&gt;1. Juni 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/01/heisst-die-zukunft-ria.aspx"&gt;Heißt die Zukunft RIA?&lt;/A&gt; 
&lt;LI&gt;1. Mai 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/05/01/woran-erkennt-man-einen-guten-entwickler.aspx"&gt;Woran erkennt man einen guten Entwickler?&lt;/A&gt; 
&lt;LI&gt;1. April 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/04/01/interfaces-vs-abstrakte-klassen.aspx"&gt;Interfaces vs abstrakte Klassen&lt;/A&gt; 
&lt;LI&gt;1. März 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/03/01/sinn-und-zweck-von-aop.aspx"&gt;Sinn und Zweck von AOP&lt;/A&gt; 
&lt;LI&gt;1. Februar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/02/01/die-forderung-nach-softwarequalit-t.aspx"&gt;Die Forderung nach Softwarequalität&lt;/A&gt; 
&lt;LI&gt;1. Januar 2009: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2009/01/01/soa-vs-woa.aspx"&gt;SOA vs WOA&lt;/A&gt; 
&lt;LI&gt;1. Dezember 2008: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/01/dynamic-language-runtime-net-quo-vadis.aspx"&gt;Dynamic Language Runtime: .NET, quo vadis?&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Heute, am 1. September 2009, ist es nun wieder so weit, und unser Thema für diesen Monat lautet: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Alles var – oder nicht?&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So wohl Golo wie auch ich haben uns unabhängig voneinander im Vorfeld unsere Gedanken gemacht, wie wir diesem Thema gegenüberstehen. &lt;A href="http://www.des-eisbaeren-blog.de/post/2009/09/01/Alles-var-e28093-oder-nicht.aspx"&gt;Golos Kommentar&lt;/A&gt; findet sich zeitgleich in seinem Blog, folgend nun mein Kommentar zu diesem Thema:&lt;/P&gt;
&lt;P&gt;Nein, werter Leser, das ist &lt;EM&gt;kein&lt;/EM&gt; Rechtschreibefehler, das ist eine wirklich &lt;STRIKE&gt;v&lt;/STRIKE&gt;wa(h)re Geschichte. &lt;BR&gt;Scherz beiseite, los gehts… ;-)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Einleitung&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Mit C# 3.0 kam ein neues Schlüsselwort names &lt;A href="http://msdn.microsoft.com/de-de/library/bb383973.aspx"&gt;var&lt;/A&gt; hinzu, nur was hat es damit auf sich?&lt;/P&gt;
&lt;P&gt;Es handelt sich dabei weder um ein spät gebundenen noch um einen Variant Typ, wie man ihn bspw. von Scriptsprachen her kennt, sondern um ein Feature das erst die Nutzung von anonymen Typen möglich macht.&lt;/P&gt;
&lt;P&gt;Einfach gesagt heisst das, dass der Compiler den Typ auf der linken Seite vom Ausdruck auf der rechten Seite ableitet. &lt;BR&gt;Also sind die Variablen immer stark typisiert und zwar zur Kompilezeit, nicht erst zur Laufzeit.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Was ist der Sinn des ganzen, bzw. wieso wurde dieses Feature integriert?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Im Zuge der Entwicklung von LINQ wurden die anonymen Typen eingefügt um eine Projektion der Daten auf irgendeine Objektstruktur zu ermöglichen, ohne dazu immer wieder neue Datenhaltungsklassen erstellen zu müssen.&lt;/P&gt;
&lt;P&gt;Damit ist dann bspw. sowas möglich:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;List&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;&amp;gt; data &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;&amp;gt; &lt;br /&gt;{ &lt;br /&gt;  &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Patrick:24"&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Stefan:16"&lt;/span&gt;, &lt;br /&gt;  &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Jörg:22"&lt;/span&gt; &lt;br /&gt;}; &lt;br /&gt;&lt;br /&gt;var persons &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; from dataEntry &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; data &lt;br /&gt;              let splitted &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; dataEntry.Split(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt;[] { ':' }) &lt;br /&gt;              select &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; &lt;br /&gt;              { &lt;br /&gt;                Name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; splitted[0], &lt;br /&gt;                Age &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;.Parse(splitted[1]) &lt;br /&gt;              }; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;foreach&lt;/span&gt; (var person &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; persons) &lt;br /&gt;{ &lt;br /&gt;  Console.WriteLine(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Name: {0}, Age: {1}"&lt;/span&gt;, person.Name, person.Age); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Dabei ist der Typ von &lt;EM&gt;persons&lt;/EM&gt; &lt;A href="http://msdn.microsoft.com/de-de/library/9eekhta0.aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/A&gt; wobei T in Visual Studio als "a” für Anonymous gekennzeichnet wird. &lt;BR&gt;Und dementsprechend ist jeder Eintrag in dieser durchlaufbaren Menge ein anonymer Typ, der im Hintergrund vom Kompiler generiert und bereitgestellt wird.&lt;/P&gt;
&lt;P&gt;Die Eigenschaft “Name” ist – wer hätte es gedacht – vom Typ string und “Age” vom Datentyp &lt;A href="http://msdn.microsoft.com/de-de/library/5kzh1b5w(VS.80).aspx"&gt;int&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wo kann &lt;EM&gt;var&lt;/EM&gt; überall eingesetzt werden?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Das Schlüsselwort kann nur für lokale Variablen genutzt werden, so sind automatisch auch anonyme Typen nur in diesem Bereich nutzbar. D.h. es können auch keine anonymen Typen über Methodengrenzen hinaus übergeben werden.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wo macht es Sinn var einzusetzen und wann ist ein var mehr zuviel?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Das ist eine spannende Frage und eigentlich der Kernpunkt dieses Streitgespräches. &lt;BR&gt;Hier einfach mal ein paar Beispiele:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SetProperties() &lt;br /&gt;{ &lt;br /&gt;  var collectionMapping &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.CollectionMapping; &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(collectionMapping.Count() &amp;gt; 0) &lt;br /&gt;  { &lt;br /&gt;    collectionMapping.Clear(); &lt;br /&gt;  } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SetProperties() &lt;br /&gt;{ &lt;br /&gt;  ICollectionMapping collectionMapping &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.CollectionMapping; &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(collectionMapping.Count() &amp;gt; 0) &lt;br /&gt;  { &lt;br /&gt;    collectionMapping.Clear(); &lt;br /&gt;  } &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RegisterType() &lt;br /&gt;{ &lt;br /&gt;    var objectToXElement &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; BuildObjectToXElementFunc&amp;lt;TEntity&amp;gt;(); &lt;br /&gt;    var xElementToObject &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; BuildXElementToObjectFunc&amp;lt;TEntity&amp;gt;(); &lt;br /&gt;&lt;br /&gt;    RegisterType(objectToXElement, xElementToObject); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RegisterType() &lt;br /&gt;{ &lt;br /&gt;    Func&amp;lt;TEntity, XElement&amp;gt; objectToXElement &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; BuildObjectToXElementFunc&amp;lt;TEntity&amp;gt;(); &lt;br /&gt;    Func&amp;lt;XElement, TEntity&amp;gt; xElementToObject &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; BuildXElementToObjectFunc&amp;lt;TEntity&amp;gt;(); &lt;br /&gt;&lt;br /&gt;    RegisterType(objectToXElement, xElementToObject); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;oder sowas: &lt;BR&gt;&lt;BR&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;var wtf &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; GetPattern();&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;vs&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Pattern pattern &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; GetPattern();&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;In der ersten Methode wird var benutzt und in der folgenden dann nicht mehr. &lt;BR&gt;Ich habe die Beispiele extra so gewählt, denn wenn in diesen Methoden var benutzt wird, sieht man auf den ersten Blick (ohne die Maus zu benutzen, oder einen verrenkten Shortcut) nicht, um was für einen Typen es sich hier handelt.&lt;/P&gt;
&lt;P&gt;Und das ist natürlich ein sehr wichtiger Aspekt. &lt;BR&gt;Denn was nützt mir das weniger schreiben und weniger Code, wenn ich beim lesen – was übrigens vom Zeitaufwand deutlich mehr ist als das Schreiben – nicht mehr auf den ersten Blick erkennen kann, was für Typen das sind.&lt;/P&gt;
&lt;P&gt;Man sollte das Schlüsselwort im Regelfall wirklich &lt;U&gt;nur einsetzen um die anonymen Typen benutzen zu können&lt;/U&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ausnahme wenn es sich um eine lange Typdefinition handelt _und_ initialisiert wird&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ich für meinen Teil halte es so, das ich es eben dann benutze und zusätzlich auch noch in Fällen bei denen die Initialisierung (nicht Zuweisung) rechts daneben steht.&lt;/P&gt;
&lt;P&gt;Und das auch nur wenn es sich um eine lange und komplexere Typbezeichnung handelt, das sind dann meistens solche mit generischem Typparameter, Beispiel:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Foo() &lt;br /&gt;{ &lt;br /&gt;    Dictionary&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;, Person&amp;gt; persons &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;, Person&amp;gt; {…} &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Foo() &lt;br /&gt;{ &lt;br /&gt;    var persons &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;, Person&amp;gt; {…} &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Durch den sprechenden Namen und dadurch das die Initialisierung der Variable und so auch die implizite Zuweisung des Types auf der rechten ist, kann das auch gut gelesen werden und ist praktikabel finde ich.&lt;/P&gt;
&lt;P&gt;Diese Anwendung hilft auch Redundanzen zu vermeiden. Wenn man bspw. die Initialisierung änderet ist der Typ auch automatisch angepasst. &lt;BR&gt;Das ist ein netter Nebeneffekt, kann aber auch böse enden, wenn man sich dessen nicht bewusst ist, das Interface gleich ist, aber sich die Methoden / Eigenschaften die später aufgerufen werden, anders verhalten.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Ausnahme wenn es um LINQ Abfragen handelt&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Bei LINQ Abfragen &lt;STRONG&gt;benötigt es &lt;U&gt;kein&lt;/U&gt; var&lt;/STRONG&gt;, wenn keine anonymen Typen genutzt werden. &lt;BR&gt;Allerdings halte ich es auch bei LINQ-Abfragen so, dass ich meistens var benutze. &lt;BR&gt;Denn mit guten Namen und im kleinen Kontext gehalten ist klar und verständlich was rüber kommt. Grösster Vorteil hierbei ist auch die automatische Anpassung des Types.&lt;/P&gt;
&lt;P&gt;Dies kommt in diesem Fall sehr zum Vorschein, denn durch Projektion kann sich der Rückgabetyp schnell ändern, obwohl die Eigenschaften bspw. gleich bleiben.&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Foo() &lt;br /&gt;{ &lt;br /&gt;    IEnumerable&amp;lt;Person&amp;gt; persons &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; from person &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; list.Persons where person.Age &amp;gt; 20 select person; &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Foo() &lt;br /&gt;{ &lt;br /&gt;    var persons &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; from person &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; list.Persons where person.Age &amp;gt; 20 select person; &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Das wars auch schon mit den Ausnahmen. Alles andere ist in meinen Augen nicht mehr lesbar und auch nicht gerechtfertigt. &lt;BR&gt;Ich finde es schon ein wenig beängstigend, wenn ich im Web (Auch von Microsoft) Beispiele sehen, die Zahlen und Zeichenfolgen in 20, 30 Zeilen nur mit var arbeiten. &lt;BR&gt;Wenn die Variablennamen dann noch schlecht gewählt, gute Nacht.&lt;/P&gt;
&lt;P&gt;Was denkt ihr über die Sache und vorallem über meine genannten Ausnahmen?&lt;/P&gt;</description></item><item><title>Shortcut f&amp;#252;r das kompilieren des aktuell selektierten Projekts erstellen</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/06/shortcut-f-r-das-kompilieren-des-aktuell-selektierten-projekts-erstellen.aspx</link><pubDate>Mon, 06 Jul 2009 18:02:35 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:211158</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;p&gt;Es gibt den Short-Cut CTRL-SHIFT-B um das die aktuelle Solution zu kompilieren.    &lt;br /&gt;Ein Shortcut um das aktuell selektierte Projekt zu kompilieren gibt es standardmässig leider nicht, das lässt sich aber leicht ändern und ist super praktisch.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Tools –&amp;gt; Options –&amp;gt; Keyboard –&amp;gt; Build.BuildSelection auswählen und einen Shortcut vergeben.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Nicht vergessen den Shortcut per “Assign” oder “Zuweisen” auch wirklich zuzuweisen.    &lt;br /&gt;Wenn der Shortcut im Menü angezeigt wird, funktioniert er auch. Ein Neustart von Visual Studio ist nicht nötig.&lt;/p&gt;  &lt;p&gt;Mehr zu Shortcuts gibts ausserdem in einem älteren Blogpost: &lt;a href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/06/13/mausfrei-f-r-eine-woche-oder-home-end-und-konsorten.aspx"&gt;Mausfrei für eine Woche, oder: Home, End und Konsorten&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SqlServer: User or role already exists in the current database</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/03/sqlserver-user-or-role-already-exists-in-the-current-database.aspx</link><pubDate>Fri, 03 Jul 2009 17:50:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:211122</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Wenn ein Backup von einer SqlServer-Datenbank zurückgespielt wird kann es sein, das anschliessend für die vorher berechtigten Benutzer das Login fehlschlägt.&lt;BR&gt;Im Sql Management Studio kann unter der Funktion "UserMapping"&amp;nbsp; die Berechtigung im Normalfall wieder zugewiesen werden, jedoch kann es eben in diesem Fall zum Fehler 15023 kommen.&lt;/P&gt;
&lt;P&gt;Für mehr Details zu diesem Fehler siehe &lt;A href="http://blog.falafel.com/ct.ashx?id=2c653d2a-846a-4436-a8ef-9c7485b699fc&amp;amp;url=http%3a%2f%2fsupport.microsoft.com%2fkb%2f246133"&gt;hier&lt;/A&gt; und &lt;A href="http://blog.falafel.com/ct.ashx?id=2c653d2a-846a-4436-a8ef-9c7485b699fc&amp;amp;url=http%3a%2f%2fsupport.microsoft.com%2fkb%2f240872"&gt;hier&lt;/A&gt;, wie man den Fehler beheben kann findet sich in &lt;A href="http://blog.falafel.com/2007/07/14/Error15023UserOrRoleAlreadyExistsInTheCurrentDatabase.aspx"&gt;diesem&lt;/A&gt;&amp;nbsp;und &lt;A href="http://blog.sqlauthority.com/2007/02/15/sql-server-fix-error-15023-user-already-exists-in-current-database/"&gt;diesem&lt;/A&gt;&amp;nbsp;Blogpost.&lt;/P&gt;</description></item><item><title>MSDN Webcastserie zur pragmatischen Webarchitektur mit ASP.NET 3.5</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/07/02/msdn-webcastserie-zur-pragmatischen-webarchitektur-mit-asp-net-3-5.aspx</link><pubDate>Thu, 02 Jul 2009 21:00:54 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:211096</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;p&gt;Auf MSDN ist eine neue Ausgabe vom PWA (Pragmatic Web Architecture) von &lt;a href="http://www.codezone.de/DetailPage.Codezone?GUID=ff90975c-32f5-414a-8611-b81c524c177a"&gt;Patrick A. Lorenz&lt;/a&gt; erschienen, das ASP.NET 3.5 fokusiert.&lt;/p&gt;  &lt;p&gt;Ich finde das Konzept gut gelungen und die vorherige Ausgabe der Webcast-Serie (Aus dem Jahre 2006) war sehr gut gemacht. Darum empfehlen ich allen die sich für eine pragmatische Architektur mit ASP.NET interessieren, da reinzuschauen.&lt;/p&gt;  &lt;p&gt;Zitat:&lt;/p&gt;  &lt;div class="Quotes"&gt;Grundkonzept von PWA ist eine dem Projekt angepasste, flexibel erweiterbare Architektur für Web-Applikation. Seit über sechs Jahren kommt PWA nicht nur bei der PGK sondern auch vielen anderen Unternehmen erfolgreich zum Einsatz. Bereits 2006 wurde das Konzept mit einer umfangreichen Webcast-Serie, Artikeln und Vorträgen vorgestellt. Mit .NET hat sich auch PWA über zeit verändert. Die neue Webcast-Serie stellt PWA basierend auf ASP.NET 3.5 SP 1 und mit einer neuen Beispielapplikation vor.&lt;/div&gt;  &lt;p&gt;Die Webcasts und Quelltexte können direkt von der Firmen-Webseite von Patrick heruntergeladen werden.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.pgk.de/news/2009-06-24_pwa.aspx"&gt;Neue MSDN Webcast-Serie zu ASP.NET Architektur (Webcasts und Quelltexte)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;</description></item><item><title>Optimierungseinstellung im Reflector, oder: Wie sieht LINQ wirklich aus?</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2009/06/08/optimierungseinstellung-im-reflector-oder-wie-sieht-linq-wirklich-aus.aspx</link><pubDate>Mon, 08 Jun 2009 18:24:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:210630</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Beim &lt;A href="http://www.dotnetkk.de/Appointments/Details/dritter-net-stammtisch-konstanz-kreuzlingen"&gt;dritten&lt;/A&gt; Treffen vom &lt;A href="http://www.dotnetkk.de/"&gt;.NET Stammtisch Konstanz - Kreuzlingen&lt;/A&gt; habe ich einen Vortrag über &lt;A href="http://de.wikipedia.org/wiki/LINQ"&gt;LINQ&lt;/A&gt; gehalten. &lt;BR&gt;Dabei wollte ich zeigen wie aus dem SQL ähnlichen Syntax von LINQ aneinandergereihte Methoden Aufrufe werden und aus den &lt;A href="http://msdn.microsoft.com/de-de/library/bb397687.aspx"&gt;Lambda Ausdrücken&lt;/A&gt; jeweils anonyme Methoden.&lt;/P&gt;
&lt;P&gt;Das geht über den &lt;A href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/A&gt; auch wunderbar. Kurz vor dem Vortrag habe ich den Fehler begangen und Windows 7 installiert… nicht das Windows 7 der Fehler gewesen wäre, sondern die Neuinstallation. &lt;BR&gt;So hatte ich vieles noch nicht 100% so wie es war und ausserdem war plötzlich die neuste Version vom Reflector installiert.&lt;/P&gt;
&lt;P&gt;Als ich während dem Vortrag den Code demonstrieren wollte, bekamen wir natürlich nur wunderschöne Lambda-Ausdrücke zu sehen, keine anonymen Methoden. Ich wusste nicht wieso und hatte keine Zeit das herauszufinden.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Edit:&lt;/STRONG&gt;&lt;BR&gt;LINQ war das natürlich nicht, sondern nur Lambda-Ausdrücke.&lt;BR&gt;Jedoch gilt das genau so für LINQ, dort wird die LINQ-Syntax automatisch vom Kompiler&amp;nbsp;in den Erweiterungemethoden-Syntax + Lambda-Ausdrücke umgewandelt.&lt;BR&gt;Natürlich kann auch von Hand der Erweiterungsmethoden-Syntax benutzt werden, bei einer Bedingung oder wirklich komplexen Aufgaben ist das meist angenehmer.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;LINQ-Syntax&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Download GetDownloadByFileName(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; fileName) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; (from download &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.GetList()&lt;br /&gt;                  where download.FileName == fileName).SingleOrDefault();&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Erweiterungsmethoden-Syntax&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Download GetDownloadByFileName(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; fileName) &lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.GetList().Where(download =&amp;gt; download.FileName == fileName);&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;.NET 3.5&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Download GetDownloadByFileName(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; fileName) &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.GetList(d =&amp;gt; d.FileName == fileName).SingleOrDefault(); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Eigentlich ist es relativ einfach, man gehe im Menü unter: &lt;EM&gt;View –&amp;gt; Options –&amp;gt; Disassembler&lt;/EM&gt; und stellt bei &lt;EM&gt;Optimization&lt;/EM&gt; &lt;STRONG&gt;.NET 2.0&lt;/STRONG&gt; ein, dann sieht es nämlich so aus:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Download GetDownloadByFileName(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; fileName)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.GetList(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;delegate&lt;/span&gt; (Download d) {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; d.FileName == fileName;&lt;br /&gt;    }).SingleOrDefault&amp;lt;Download&amp;gt;();&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Wird &lt;STRONG&gt;None&lt;/STRONG&gt; oder &lt;STRONG&gt;.NET 1.0&lt;/STRONG&gt; eingestellt ist der Code schon fast nicht mehr zu lesen.&lt;BR&gt;Es ist hier gut zu erkennen, was der Kompiler im Hintergrund alles erzeugt damit die oben geschriebene Syntax funktioniert.&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Download GetDownloadByFileName(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; fileName) &lt;br /&gt;{ &lt;br /&gt;    &amp;lt;&amp;gt;c__DisplayClass1 CS$&amp;lt;&amp;gt;8__locals2; &lt;br /&gt;    Download CS$1$0000; &lt;br /&gt;    CS$&amp;lt;&amp;gt;8__locals2 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; &amp;lt;&amp;gt;c__DisplayClass1(); &lt;br /&gt;    CS$&amp;lt;&amp;gt;8__locals2.fileName &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; fileName; &lt;br /&gt;    CS$1$0000 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.GetList(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Func&amp;lt;Download, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;bool&lt;/span&gt;&amp;gt;(CS$&amp;lt;&amp;gt;8__locals2.&amp;lt;GetDownloadByFileName&amp;gt;b__0)).SingleOrDefault&amp;lt;Download&amp;gt;(); &lt;br /&gt;Label_0028: &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; CS$1$0000; &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bearbeitung / Korrekturen&lt;/STRONG&gt;:&lt;BR&gt;09.06.09 - Das Codesnippet zu .NET 2.0 war natürlich das falsche, jetzt sieht man auch die anonyme Methode.&lt;BR&gt;09.09.09 - LINQ war ja nicht drin, ist jetzt hinzugefügt ;-)&lt;/P&gt;</description></item></channel></rss>