Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying out params for Type.GetMethod

Tags:

c#

reflection

I'm using reflection to get at the TryParse method info (upvote for the first person to guess why ;).

If I call:

typeof(Int32).GetMethod("Parse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string) },
  null);

I get a method back, but extending this slightly:

typeof(Int32).GetMethod("TryParse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string), typeof(Int32) },
  null);

I get nothing back. My spidersense is telling me it's because the second parameter is an out parameter.

Anyone know what I've done wrong here?

like image 765
Khanzor Avatar asked Dec 23 '10 03:12

Khanzor


2 Answers

Try this

typeof(Int32).GetMethod("TryParse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string), typeof(Int32).MakeByRefType() },
  null);
like image 119
Jab Avatar answered Nov 16 '22 22:11

Jab


Like @Jab's but a little shorter:

var tryParseMethod = typeof(int).GetMethod(nameof(int.TryParse),
                                           new[]
                                           {
                                               typeof(string),
                                               typeof(int).MakeByRefType()
                                           });

// use it
var parameters = new object[] { "1", null };
var success = (bool)tryParseMethod.Invoke(null, parameters);
var result = (int)parameters[1];
like image 40
Johan Larsson Avatar answered Nov 16 '22 21:11

Johan Larsson