On Wed, 2009-02-04 at 22:56 +1300, Scott Peterson wrote: > I will start the ball rolling with a simple feature: > > Problem: While the 'typeof' keyword is very convenient for getting > Type objects, it is much more difficult to get any other kind of > reflection data. For example, to get a MethodInfo object, one usually > does: > > > static readonly MethodInfo methodInfo = typeof(Foo).GetMethod("Bar", new > > Type [] { typeof(string), typeof(int) });
This can already be improved upon: MethodInfo methodInfo = new Func<string, int, RetType>(Foo.Bar).Method; // or Action<string, int> depending on return type Ideally, this could be improved upon *further*: MethodInfo methodInfo = Lambda.F(Foo.Bar).Method; Lambda comes from Mono.Rocks, and has methods such as: static class Lambda { public static Func<T1, T2, TResult> F<T1, T2, TResult> ( Func<T1, T2, TResult> lambda) { return lambda; } } Alas, this doesn't work for two reasons: 1. Foo.Bar() could be overloaded, and the above Lambda.F() doesn't allow specifying the overload. This can be "fixed" by explicitly specifying parameters: MethodInfo mi = Lambda.F<string, int, RetType>(Foo.Bar); // or MethodInfo m = Lambda.A<string, int>(Foo.Bar); 2. C#'s type inferencing *sucks*. It's nice, but compared to e.g. F# it's *very* limited. For example: var f = Lambda.F(Console.ReadLine); There is only one Console.ReadLine() method, so you'd *hope* that C# could infer the return type of Console.ReadLine and thus call Lambda.F<TResult>(Func<TResult>), as it's the only possible match. Alas, gmcs can't make this inference. So interesting as `reflect' is, it would be ~easily handled with normal libraries IF ONLY C#'s type inferencing didn't suck balls. (The downside to the above is that it only works for methods, not properties, events, or constructors, so `reflect' could still be useful, though it would be nice if a new keyword wasn't needed.) - Jon _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list