@@ -988,20 +988,32 @@ private static MethodInfo MarshalInvokeCheckAndCreate<TRet>(Type[] genArgs, Dele
988
988
/// Because it is strongly typed, this can only be applied to methods whose return type
989
989
/// is known at compile time, that is, that do not depend on the type parameter of the method itself.
990
990
/// </summary>
991
- /// <typeparam name="TRet">The return value</typeparam>
991
+ /// <typeparam name="TTarget">The type of the receiver of the instance method.</typeparam>
992
+ /// <typeparam name="TResult">The type of the return value of the method.</typeparam>
992
993
/// <param name="func">A delegate that should be a generic method with a single type parameter.
993
994
/// The generic method definition will be extracted, then a new method will be created with the
994
995
/// given type parameter, then the method will be invoked.</param>
996
+ /// <param name="target">The target of the invocation.</param>
995
997
/// <param name="genArg">The new type parameter for the generic method</param>
996
998
/// <returns>The return value of the invoked function</returns>
997
- public static TRet MarshalInvoke < TRet > ( Func < TRet > func , Type genArg )
999
+ public static TResult MarshalInvoke < TTarget , TResult > ( FuncInstanceMethodInfo1 < TTarget , TResult > func , TTarget target , Type genArg )
1000
+ where TTarget : class
998
1001
{
999
- var meth = MarshalInvokeCheckAndCreate < TRet > ( genArg , func ) ;
1000
- return ( TRet ) meth . Invoke ( func . Target , null ) ;
1002
+ var meth = func . MakeGenericMethod ( genArg ) ;
1003
+ return ( TResult ) meth . Invoke ( target , null ) ;
1004
+ }
1005
+
1006
+ /// <summary>
1007
+ /// A static version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type)"/>.
1008
+ /// </summary>
1009
+ public static TResult MarshalInvoke < TResult > ( FuncStaticMethodInfo1 < TResult > func , Type genArg )
1010
+ {
1011
+ var meth = func . MakeGenericMethod ( genArg ) ;
1012
+ return ( TResult ) meth . Invoke ( null , null ) ;
1001
1013
}
1002
1014
1003
1015
/// <summary>
1004
- /// A one-argument version of <see cref="MarshalInvoke{TRet} "/>.
1016
+ /// A one-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1005
1017
/// </summary>
1006
1018
public static TRet MarshalInvoke < TArg1 , TRet > ( Func < TArg1 , TRet > func , Type genArg , TArg1 arg1 )
1007
1019
{
@@ -1010,7 +1022,7 @@ public static TRet MarshalInvoke<TArg1, TRet>(Func<TArg1, TRet> func, Type genAr
1010
1022
}
1011
1023
1012
1024
/// <summary>
1013
- /// A two-argument version of <see cref="MarshalInvoke{TRet} "/>.
1025
+ /// A two-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1014
1026
/// </summary>
1015
1027
public static TRet MarshalInvoke < TArg1 , TArg2 , TRet > ( Func < TArg1 , TArg2 , TRet > func , Type genArg , TArg1 arg1 , TArg2 arg2 )
1016
1028
{
@@ -1019,7 +1031,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TRet>(Func<TArg1, TArg2, TRet> fu
1019
1031
}
1020
1032
1021
1033
/// <summary>
1022
- /// A three-argument version of <see cref="MarshalInvoke{TRet} "/>.
1034
+ /// A three-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1023
1035
/// </summary>
1024
1036
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TRet > func , Type genArg ,
1025
1037
TArg1 arg1 , TArg2 arg2 , TArg3 arg3 )
@@ -1029,7 +1041,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TRet>(Func<TArg1, TArg2, T
1029
1041
}
1030
1042
1031
1043
/// <summary>
1032
- /// A four-argument version of <see cref="MarshalInvoke{TRet} "/>.
1044
+ /// A four-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1033
1045
/// </summary>
1034
1046
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TArg4 , TRet > func ,
1035
1047
Type genArg , TArg1 arg1 , TArg2 arg2 , TArg3 arg3 , TArg4 arg4 )
@@ -1039,7 +1051,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TRet>(Func<TArg1, T
1039
1051
}
1040
1052
1041
1053
/// <summary>
1042
- /// A five-argument version of <see cref="MarshalInvoke{TRet} "/>.
1054
+ /// A five-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1043
1055
/// </summary>
1044
1056
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TRet > func ,
1045
1057
Type genArg , TArg1 arg1 , TArg2 arg2 , TArg3 arg3 , TArg4 arg4 , TArg5 arg5 )
@@ -1049,7 +1061,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TRet>(Func<T
1049
1061
}
1050
1062
1051
1063
/// <summary>
1052
- /// A six-argument version of <see cref="MarshalInvoke{TRet} "/>.
1064
+ /// A six-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1053
1065
/// </summary>
1054
1066
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TRet > func ,
1055
1067
Type genArg , TArg1 arg1 , TArg2 arg2 , TArg3 arg3 , TArg4 arg4 , TArg5 arg5 , TArg6 arg6 )
@@ -1059,7 +1071,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TRet>
1059
1071
}
1060
1072
1061
1073
/// <summary>
1062
- /// A seven-argument version of <see cref="MarshalInvoke{TRet} "/>.
1074
+ /// A seven-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1063
1075
/// </summary>
1064
1076
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TRet > func ,
1065
1077
Type genArg , TArg1 arg1 , TArg2 arg2 , TArg3 arg3 , TArg4 arg4 , TArg5 arg5 , TArg6 arg6 , TArg7 arg7 )
@@ -1069,7 +1081,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7
1069
1081
}
1070
1082
1071
1083
/// <summary>
1072
- /// An eight-argument version of <see cref="MarshalInvoke{TRet} "/>.
1084
+ /// An eight-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1073
1085
/// </summary>
1074
1086
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TRet > ( Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TRet > func ,
1075
1087
Type genArg , TArg1 arg1 , TArg2 arg2 , TArg3 arg3 , TArg4 arg4 , TArg5 arg5 , TArg6 arg6 , TArg7 arg7 , TArg8 arg8 )
@@ -1079,7 +1091,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7
1079
1091
}
1080
1092
1081
1093
/// <summary>
1082
- /// A nine-argument version of <see cref="MarshalInvoke{TRet} "/>.
1094
+ /// A nine-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1083
1095
/// </summary>
1084
1096
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TArg9 , TRet > (
1085
1097
Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TArg9 , TRet > func ,
@@ -1090,7 +1102,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7
1090
1102
}
1091
1103
1092
1104
/// <summary>
1093
- /// A ten-argument version of <see cref="MarshalInvoke{TRet} "/>.
1105
+ /// A ten-argument version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1094
1106
/// </summary>
1095
1107
public static TRet MarshalInvoke < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TArg9 , TArg10 , TRet > (
1096
1108
Func < TArg1 , TArg2 , TArg3 , TArg4 , TArg5 , TArg6 , TArg7 , TArg8 , TArg9 , TArg10 , TRet > func ,
@@ -1101,7 +1113,7 @@ public static TRet MarshalInvoke<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7
1101
1113
}
1102
1114
1103
1115
/// <summary>
1104
- /// A 1 argument and n type version of <see cref="MarshalInvoke{TRet} "/>.
1116
+ /// A 1 argument and n type version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1105
1117
/// </summary>
1106
1118
public static TRet MarshalInvoke < TArg1 , TRet > (
1107
1119
Func < TArg1 , TRet > func ,
@@ -1112,7 +1124,7 @@ public static TRet MarshalInvoke<TArg1, TRet>(
1112
1124
}
1113
1125
1114
1126
/// <summary>
1115
- /// A 2 argument and n type version of <see cref="MarshalInvoke{TRet} "/>.
1127
+ /// A 2 argument and n type version of <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget, Type) "/>.
1116
1128
/// </summary>
1117
1129
public static TRet MarshalInvoke < TArg1 , TArg2 , TRet > (
1118
1130
Func < TArg1 , TArg2 , TRet > func ,
@@ -1147,7 +1159,7 @@ private static MethodInfo MarshalActionInvokeCheckAndCreate(Type[] typeArguments
1147
1159
}
1148
1160
1149
1161
/// <summary>
1150
- /// This is akin to <see cref="MarshalInvoke{TRet}(Func{TRet} , Type)"/>, except applied to
1162
+ /// This is akin to <see cref="MarshalInvoke{TTarget, TResult}(FuncInstanceMethodInfo1{TTarget, TResult}, TTarget , Type)"/>, except applied to
1151
1163
/// <see cref="Action"/> instead of <see cref="Func{TRet}"/>.
1152
1164
/// </summary>
1153
1165
/// <param name="act">A delegate that should be a generic method with a single type parameter.
0 commit comments