Там нет Standart перегрузок для выбора между методами с различными типами , Вы должны найти метод самостоятельно. Вы можете написать свои собственные методы расширения, как это:
public static class TypeExtensions {
public static MethodInfo GetMethod(this Type type, string name, BindingFlags bindingAttr, Type[] types, Type returnType) {
var methods = type
.GetMethods(BindingFlags.Static | BindingFlags.Public)
.Where(mi => mi.Name == "op_Explicit")
.Where(mi => mi.ReturnType == typeof(int));
if (!methods.Any())
return null;
if (methods.Count() > 1)
throw new System.Reflection.AmbiguousMatchException();
return methods.First();
}
public static MethodInfo GetExplicitCastToMethod(this Type type, Type returnType)
{
return type.GetMethod("op_Explicit", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, new Type[] { type }, returnType);
}
}
И затем использовать его:
MethodInfo m = typeof(IntPtr).GetExplicitCastToMethod(typeof(int));
точно, есть два определенных забросы в классе IntPtr:
public static explicit operator IntPtr(long value)
public static explicit operator long(IntPtr value)
И не определено в классе System.Int64 (long является псевдонимом Int64).
Вы можете использовать Convert.ChangeType
для этих целей
привет, спасибо за ответ, но почему она дает мне errorr на .где? он также дает ошибку при возврате type.GetMethod ("op_Explicit", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, новый тип [] {type}, returnType); – user1872492
import System.Reflection с 'using System.Reflection' в начале вашего файла –
Я уже импортировал System.Reflection – user1872492