沒有非標準重載與不同類型的方法之間做出選擇。你必須自己找到方法。您可以編寫自己的擴展方法,像這樣:
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上。哪裏?它也給返回類型上的錯誤。GetMethod(「op_Explicit」,BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic,new Type [] {type},returnType); – user1872492
導入System.Reflection與'在你的文件開始使用System.Reflection' –
我已經導入System.Reflection – user1872492