Подтвердить что ты не робот

Указание параметров для Type.GetMethod

Я использую рефлексию для получения информации о методе TryParse (upvote для первого человека, чтобы угадать, почему;).

Если я вызываю:

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

Я возвращаю метод, но немного расширяю его:

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

Я ничего не получаю. Мой spidersense говорит мне об этом, потому что второй параметр является параметром out.

Кто-нибудь знает, что я сделал здесь неправильно?

4b9b3361

Ответ 1

Попробуйте это

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

Ответ 2

Как @Jab, но немного короче:

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];