Указание параметров для Type.GetMethod - PullRequest
19 голосов
/ 23 декабря 2010

Я использую рефлексию, чтобы получить информацию о методе 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);

Я ничего не получаю назад.Моя паучья мысль говорит мне, что это потому, что второй параметр - это выходной параметр.

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

Ответы [ 2 ]

40 голосов
/ 23 декабря 2010

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

typeof(Int32).GetMethod("TryParse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string), typeof(Int32).MakeByRefType() },
  null);
3 голосов
/ 25 ноября 2015

Как у @ Джеба, но немного короче:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...