<?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>Peter Bucher : ASP.NET, TryParse, Type</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/tags/ASP.NET/TryParse/Type/default.aspx</link><description>Ordnungsbegriffe: ASP.NET, TryParse, Type</description><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Typkonvertierung vereinfacht, oder: &lt;Value&gt;.ToOrDefault&lt;Type&gt;();</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/08/typkonvertierung-vereinfacht-oder-value-to-type.aspx</link><pubDate>Mon, 08 Dec 2008 20:29:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:204828</guid><dc:creator>Peter Bucher</dc:creator><slash:comments>4</slash:comments><comments>http://www.aspnetzone.de/blogs/peterbucher/comments/204828.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/peterbucher/commentrss.aspx?PostID=204828</wfw:commentRss><description>&lt;DIV class=Quotes&gt;
&lt;P&gt;&lt;STRONG&gt;*Update&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Im Zuge meiner Arbeit an der &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/12/09/facade-pattern-und-ein-anwendungsbeispiel-sessionfacade.aspx"&gt;SessionFacade&lt;/A&gt; ging mir das Licht auf, dass wir es im Optimalfall mit relativ wenigen Session-Variablen zu tun haben und über eine SessionFacade auch einen einfachen typisierten Zugriff gewähren können.&lt;BR&gt;Zudem finden wir in der Session im Normalfall nur geboxte Typen, die mit einem einfachen &lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=28579"&gt;Cast&lt;/A&gt; zu ihrem Urprungstyp gewandelt werden können.&lt;BR&gt;Da die .To-Methoden nur für das Parsen vom Typ String in einen anderen Typen gedacht ist, bringt es nichts bspw. ein geboxter int zu einem String zu wandeln um diesen nochmals zu parsen, wenn ein &lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=28579"&gt;Cast&lt;/A&gt; reicht.&lt;/P&gt;
&lt;P&gt;Zudem ist die Angabe von "object" als Zieltyp für eine Extensionmethode nicht sehr gut gewählt, da sie dann bei allen Typen erscheint. Vorallem dann natürlich nicht, wenn es relativ unsinnig ist.&lt;/P&gt;
&lt;P&gt;Im Zuge dieser Erkenntnis habe ich den Zieltyp auf "string" geändert.&lt;BR&gt;Zusätzlich gibt es auch noch die Anforderung bei einem nicht erfolgreifen Parsing auf einen anderen Typen, einen Startwert zu setzen, der vom Standardwert des Typen abweicht.&lt;/P&gt;
&lt;P&gt;Ich habe das Beispiel unten geändert und die Erläuterung plus ein Beispiel für die zweite Überladung mit dem Standardwert hinzugefügt. Viel Spass!&lt;BR&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Insbesondere bei der Webentwicklung mit .NET haben wir viel mit Eingaben als Strings zu tun. &lt;BR&gt;Diese müssen dann in int, DateTime, double, Guid, etc... konvertiert werden.&lt;/P&gt;
&lt;P&gt;.NET bietet dabei &amp;lt;Type&amp;gt;.Parse()- / &amp;lt;Type&amp;gt;.TryParse()- oder ConvertTo&amp;lt;Type&amp;gt;-Methoden an.&lt;/P&gt;
&lt;P&gt;Hierbei gilt die Empfehlung &amp;lt;Type&amp;gt;.TryParse() zu verwenden um auf eine nicht mögliche Konvertierung aufgrund von Nullwerten oder ungültigen Werten zu reagieren.&lt;/P&gt;
&lt;P&gt;Die ganze Geschichte gibt aber viel sich immer wiederholende Schreibarbeit, ein Extrembeispiel der Konvertierung eines Strings&amp;nbsp;(Oder null-Literal!) aus einer&amp;nbsp;GET-Parameter Abfrage&amp;nbsp;zu einem int könnte mit &amp;lt;Type&amp;gt;.TryParse() so aussehen:&lt;/P&gt;
&lt;DIV class=CodeBox&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;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; value &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"index"&lt;/span&gt;]; &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Kann auch das Literal "null" darstellen &lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; typedValue;&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;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt;.TryParse(value, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;out&lt;/span&gt; typedValue) &amp;amp;&amp;amp; typedValue == 4) { &lt;br /&gt;    lblStatus.Text &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;string&lt;/span&gt;.Format(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Wert gültig: {0}"&lt;/span&gt;, typedValue); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Für eine Konvertierung, die so häufig vorkommt ist das mir - auch aufgrund von anderen Überlegungen - viel zu viel Schreibarbeit. &lt;BR&gt;Ich stelle mir sowas vor:&lt;/P&gt;
&lt;DIV class=CodeBox&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;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; typedValue &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"index"&lt;/span&gt;].ToOrDefault&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;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;(typedValue == 4) { &lt;br /&gt;    lblStatus.Text &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;string&lt;/span&gt;.Format(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Wert gültig: {0}"&lt;/span&gt;, typedValue); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Zuerst meine Überlegungen: &lt;BR&gt;Ob eine Konvertierung erfolgreich war, brauche ich nur den Wert zu überprüfen, einen Boolean ob die Konvertierung erfolgreich war, brauche ich nicht. &lt;BR&gt;Bei int reicht mir eine Prüfung auf den Stardardwert 0, bei Guid die Prüfung auf Guid.Empty, bei DateTime entweder DateTime.MinValue. &lt;BR&gt;Sind es boolsche Werte oder kann man / möchte man .MinValue von DateTime nicht benutzen, nimmt man sich Nullable Types zur Hilfe.&lt;/P&gt;
&lt;P&gt;Mehr braucht es meines Erachtens nicht um primitive Typen sowie erweiterte Strukturen zu konvertieren und festzustellen was angekommen ist.&lt;/P&gt;
&lt;P&gt;Ich habe mir dazu eine Methode geschrieben, die nach Wunsch entweder als Extension Method oder als statische Hilfsmethode in einer Tools-Klasse genutzt werden kann. (Das Original ist &lt;A href="http://www.jigar.net/howdoi/viewhtmlcontent319.aspx"&gt;hier&lt;/A&gt; zu finden)&lt;/P&gt;
&lt;P&gt;Die Implementierung:&lt;/P&gt;
&lt;DIV class=CodeBox&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;&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; partial &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; Common&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;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Gibt ein typisiertes Objekt aus einem String zurück.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Falls die Umwandlung nicht erfolgreich ist, wird stattdessen&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// der Standardwert des Zieltypen zurückgegeben.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;typeparam name="T"&amp;gt;Zieltyp&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;param name="value"&amp;gt;Zu typisierenden String&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;param name="defaultValue"&amp;gt;Standardwert (Wird bei Fehlschlag zurückgegeben)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;returns&amp;gt;Typisiertes Objekt&amp;lt;/returns&amp;gt;&lt;/span&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; T ToOrDefault&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; value, T defaultValue)&lt;br /&gt;    {&lt;br /&gt;      T result &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; defaultValue;&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; (value == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&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; result;&lt;br /&gt;&lt;br /&gt;      TypeConverter converter &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; TypeDescriptor.GetConverter(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(T));&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; (converter.CanConvertFrom(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&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;try&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;          result &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; (T)converter.ConvertFrom(value);&lt;br /&gt;        } &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;catch&lt;/span&gt; (Exception) {}&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;return&lt;/span&gt; result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&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;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Gibt ein typisiertes Objekt aus einem String zurück.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Falls die Umwandlung nicht erfolgreich ist, wird stattdessen&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// der Standardwert des Zieltypen zurückgegeben.&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;typeparam name="T"&amp;gt;Zieltyp&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;param name="value"&amp;gt;Zu typisierenden String&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;returns&amp;gt;Typisiertes Objekt&amp;lt;/returns&amp;gt;&lt;/span&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; T ToOrDefault&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; value) {&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; value.ToOrDefault&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;default&lt;/span&gt;(T));&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Die Nutzung sieht dann bspw. so aus:&lt;/P&gt;
&lt;DIV class=CodeBox&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;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Nullable&lt;/span&gt;&lt;br /&gt;DateTime? date &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"date"&lt;/span&gt;].ToOrDefault&amp;lt;DateTime?&amp;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;(date.HasValue) { &lt;br /&gt;    &amp;lt;meinObjekt&amp;gt;.Date &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; date.Value; &lt;br /&gt;}&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;// Kein Nullable&lt;/span&gt;&lt;br /&gt;Guid guid &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.Form[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"userGuid"&lt;/span&gt;].ToOrDefault&amp;lt;Guid&amp;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;(guid !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Guid.Empty) &lt;br /&gt;    currentUser &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; User.Load(guid);&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Standardwert&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; width &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"width"&lt;/span&gt;].ToOrDefault&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;(1024);&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// width == 1024 bei erfolglosem Parsing (Wenn bspw. der Parameter null zurückgibt)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// width == 4 bei erfolgreiem Parsing bei einem Eingangsstring von "4"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// Oder ohne Angabe des Typparameters (Typ wird implizit durch die Angabe des Standardwertes ermittelt)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; height &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Request.QueryString[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"height"&lt;/span&gt;].ToOrDefault(768);&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Diese Methode ist dafür gedacht um Strings oder geboxte Strings (Bspw. ein object das von Session[&amp;lt;Index&amp;gt;] zurückkommt aber ein String enhält in die typisierte Version zu konvertieren. &lt;BR&gt;Double zu int oder eigene Objekte funktionieren nicht, dafür gibt es &lt;A href="http://www.mycsharp.de/wbb2/thread.php?threadid=28579"&gt;Casts&lt;/A&gt; oder man schreibt sich eigene Typekonverter dafür. &lt;BR&gt;Bei normalen Typen (int, string, double, ...) wird bei der Eingabe von null oder ungültigen Strings jeweils der .NET-Standardwert (int = 0, Guid = Guid.Empty, ...) geliefert, bei der Verwendung von Nullable Types kann dann eine Prüfung gegen null benutzt werden.&lt;/P&gt;
&lt;P&gt;Was denkt ihr? &lt;BR&gt;Benutzt die Kommentarfunktion!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bearbeitung / Korrekturen&lt;/STRONG&gt;:&lt;BR&gt;17.12.08 - Möglichkeit zur Angabe eines Standardwertes hinzugefügt (Inspiriert durch &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt;)&lt;BR&gt;19.12.08 - Die .To-Methode vereinfacht (Danke an &lt;A href="http://www.des-eisbaeren-blog.de/"&gt;Golo Roden&lt;/A&gt;)&lt;BR&gt;19.12.08&amp;nbsp;- Die Methode von "To()" nach "ToOrDefault()" umbenannt.&lt;/P&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=204828" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Tipps/default.aspx">Tipps</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Artikel/default.aspx">Artikel</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/TryParse/default.aspx">TryParse</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Parse/default.aspx">Parse</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Type/default.aspx">Type</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Typ/default.aspx">Typ</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Konvertierung/default.aspx">Konvertierung</category><category domain="http://www.aspnetzone.de/blogs/peterbucher/archive/tags/Convert/default.aspx">Convert</category></item></channel></rss>