Thank you, this solves my problem nicely! My issue with the tryparseconstraint as an interface is that it makes sense for tryparse to be static (as with int,double etc)
also as you point out I'd need to do something to make this work with already declared types Steve On Nov 5, 11:04 am, Theraot <[EMAIL PROTECTED]> wrote: > The way is to declare TRYPARSECONSTRAINT as an interface, and then you > write classes that implement it... > > But I think you want to use this constraint for already declared > types.... (int32 and Dobule comes to mind) that's a bit of duck > typing, I may suggest to move to VB, but I'm more like to say: > > Join Microsoft Connect [https://connect.microsoft.com/default.aspx] > > And request better and powerful contraints for the next C#, I've done > some suggestions on the matter, and I would like to see more comments > and other suggestion like the mines, I hope microsoft notices that we > may do a great use of this, My thinking is: with better interfaces and > better generic contraints there is no need for duck typing, and > without duck typing as a threat there is not a reason to risk the type > safety we all know and luv from C#. > > Of course you may still use reflection (as I do below), or move to VB > as I said earlier. And by doing so, letting microsoft add to C# things > we don't asked for, and that we will need to learn how and when to use > (if we ever use them). > > I'll do the charity anyway (it's ugly, it's slow, it's hard to > understand, needs a try statement, but it works) > [dynamic in C# 4.0 will do this more beautiful, less hard to > understand, but equally slow, better generics and interfaces may do it > faster, more beautiful, easy to understand, and more important: secure > (no try statement)] > > using System; > using System.Collections.Generic; > using System.Text; > using System.Reflection; > > namespace Reflx > { > class Program > { > static void Main(string[] args) > { > var P = new Program(); > Console.WriteLine(P.GetValueFromString<int>("123")); > Console.ReadKey(); > } > public T GetValueFromString<T>(string Data) > { > try > { > var p = new ParameterModifier(2); > p[0] = false; > p[1] = true; > var info = new object[] { Data, default(T) }; > typeof(T).InvokeMember("TryParse", > BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, > null, null, info, new ParameterModifier[]{p}, null, null); > return (T)info[1]; > } > catch{} > return default(T); > } > } > > > > }- Hide quoted text - > > - Show quoted text -
