Допустим, у меня есть methodInfo для чего-то вроде Nullable<int>.HasValue
.
Есть ли способ конвертировать его в Nullable<string>.HasValue
?
Я знаю, что для обычного универсального метода я могу сделать methodInfo.GetGenericMethod()
, но я не вижу способа сделать это для типа из метода, без дополнительных затрат на отражение. Если у меня уже есть метод, почему я должен снова задуматься?
Интересно, что все методы имеют одинаковый MetadataToken
, что делает более впечатляющим то, что каким-то образом Module.ResolveMember, похоже, вытягивает правильный.
Есть ли способ сделать это с Module.ResolveMethod
? По сути, метод и тип могут иметь общие параметры, и мне может потребоваться их переключить. Так как MethodInfo всегда говорит, что его токен один и тот же, а токен представляет собой MethodInfo - самая открытая версия метода. Мне просто нужно как-то преобразовать его в мой тип.
Edit:
Более подробно, кажется, что для чего-то вроде List<T>.Add
, List<int>.Add
токен метаданных, из которого я получаю, фактически живет в моем модуле, в то время как общее определение находится в другом модуле.
Я действительно не хочу делать рефлексию, когда получаю член один раз, так как очень трудно разрешить тот же самый вызываемый метод.
Ладно, может быть, я просто глуп, но почему именно это не работает ::
var methodinfo = typeof(List<int>).GetMethod("Add");
var handle = methodinfo.MetaDataToken;
var methodinfo2 = methodinfo.Module.ResolveMethod(handle,new []{typeof(string)},null);
Почему methodInfo2 говорит, что это Add(T)
, а не Add(string)
?