|
<span style="color: blue;"><br /></span> |
|
<span style="font-family: Georgia, Times New Roman, serif;">Following C# code sample is a Generic TryParse handler for generic value type </span> |
|
<span style="font-family: Georgia, Times New Roman, serif;">lists in .Net. Any character delimited list can be split and use safe TryParse against split list </span> |
|
<span style="font-family: Georgia, Times New Roman, serif;">to ensure you have valid data.</span> |
|
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span> |
|
<span style="color: blue;">using</span> System;<br /><span style="color: blue;">using</span> System.Collections.Generic;<br /><span style="color: blue;">using</span> System.Linq;<br /><span style="color: blue;">using</span> System.Text;<br /><span style="color: blue;">using</span> System.Threading.Tasks;<br /><br /><span style="color: blue;">namespace</span> GenericTryParsehandler<br />{<br /> <span style="color: green;">/// <summary></span><br /> <span style="color: green;">/// Generic TryParsehandler to split and parse generic value type lists.</span><br /> <span style="color: green;">/// </summary></span><br /> <span style="color: green;">/// <typeparam name="T"></typeparam></span><br /> <span style="color: green;">/// <param name="value"></param></span><br /> <span style="color: green;">/// <param name="result"></param></span><br /> <span style="color: green;">/// <returns></returns></span><br /> <span style="color: blue;">public</span> <span style="color: blue;">delegate</span> <span style="color: blue;">bool</span> TryParseHandler<T>(<span style="color: blue;">string</span> value, <span style="color: blue;">out</span> T result);<br /> <span style="color: blue;">class</span> Program<br /> {<br /> <span style="color: blue;">static</span> <span style="color: blue;">void</span> Main(<span style="color: blue;">string</span>[] args)<br /> {<br /> <span style="color: blue;">var</span> semiColonDelimitedDateInput = <span style="color: #a31515;">"01/01/2001;2/02/2012;05/31/2013;05/05/1992"</span>;<br /> <span style="color: blue;">var</span> commaDelimitedIntInput = <span style="color: #a31515;">"3,4,5,6"</span>;<br /> <span style="color: blue;">var</span> intresult = commaDelimitedIntInput.TryParseList<<span style="color: blue;">int</span>>(<span style="color: blue;">new</span>[] { <span style="color: #a31515;">','</span> }, <span style="color: blue;">int</span>.TryParse);<br /> <span style="color: blue;">var</span> dateresult = semiColonDelimitedDateInput.TryParseList<DateTime>(<span style="color: blue;">new</span>[] { <span style="color: #a31515;">';'</span> }, DateTime.TryParse);<br /> <br /> <span style="color: blue;">if</span> (dateresult.Count > 0)<br /> {<br /> <span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> element <span style="color: blue;">in</span> dateresult)<br /> {<br /> Console.WriteLine(element);<br /> }<br /> }<br /> <span style="color: blue;">else</span><br /> {<br /> Console.WriteLine(<span style="color: #a31515;">"Your semiColonDelimitedDateInput cannot be parsed."</span>);<br /> }<br /> Console.WriteLine(<span style="color: #a31515;">"*******************************************************************"</span>);<br /> <span style="color: blue;">if</span> (intresult.Count > 0)<br /> {<br /> <span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> element <span style="color: blue;">in</span> intresult)<br /> {<br /> Console.WriteLine(element);<br /> }<br /> }<br /> <span style="color: blue;">else</span><br /> {<br /> Console.WriteLine(<span style="color: #a31515;">"Your commaDelimitedIntInput cannot be parsed."</span>);<br /> }<br /> Console.ReadLine();<br /> }<br /> }<br /><br /><br /> <span style="color: green;">/// <summary></span><br /> <span style="color: green;">/// </span><br /> <span style="color: green;">/// </summary></span><br /><br /> <span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">class</span> ExtensionMethods<br />{<br /> <span style="color: green;">/// <summary></span><br /> <span style="color: green;">/// Generic handler to split and TryParse each item in the list. Handler supports value types.. </span><br /> <span style="color: green;">/// </summary></span><br /> <span style="color: green;">/// <typeparam name="T"></typeparam></span><br /> <span style="color: green;">/// <param name="source"></param></span><br /> <span style="color: green;">/// <param name="separator"></param></span><br /> <span style="color: green;">/// <param name="handler"></param></span><br /> <span style="color: green;">/// <returns></returns></span><br /> <span style="color: blue;">public</span> <span style="color: blue;">static</span> List<T> TryParseList<T>(<span style="color: blue;">this</span> <span style="color: blue;">string</span> source, <span style="color: blue;">char</span>[] separator, TryParseHandler<T> handler)<br /> where T : <span style="color: blue;">struct</span><br /><br /> {<br /> <span style="color: blue;">var</span> splitList = <span style="color: blue;">new</span> List<T>();<br /> <span style="color: blue;">if</span> (<span style="color: blue;">string</span>.IsNullOrEmpty(source)) <span style="color: blue;">return</span> splitList;<br /><br /> <span style="color: blue;">var</span> parsedString = source.Split(separator, StringSplitOptions.RemoveEmptyEntries).ToList();<br /><br /> parsedString.ForEach(x =><br /> {<br /> T result;<br /> <span style="color: blue;">if</span> (handler(x, <span style="color: blue;">out</span> result))<br /> {<br /> splitList.Add(result);<br /> }<br /> });<br /><br /> <span style="color: blue;">return</span> splitList.Count == parsedString.Count ? splitList : <span style="color: blue;">new</span> List<T>();<br /> }<br />}<br />}<br /> |