本文整理汇总了C#中System.Type.Type.GetMethod方法的典型用法代码示例。如果您正苦于以下问题:C# Type.Type.GetMethod方法的具体用法?C# Type.Type.GetMethod怎么用?C# Type.Type.GetMethod使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Type.Type
的用法示例。
在下文中一共展示了Type.Type.GetMethod方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CoerceList
private object CoerceList(Type targetType, Type arrayType, IEnumerable value)
{
if (targetType.IsArray)
{
return this.CoerceArray(targetType.GetElementType(), value);
}
// targetType serializes as a JSON array but is not an array
// assume is an ICollection / IEnumerable with AddRange, Add,
// or custom Constructor with which we can populate it
// many ICollection types take an IEnumerable or ICollection
// as a constructor argument. look through constructors for
// a compatible match.
ConstructorInfo[] ctors = targetType.GetConstructors();
ConstructorInfo defaultCtor = null;
foreach (ConstructorInfo ctor in ctors)
{
ParameterInfo[] paramList = ctor.GetParameters();
if (paramList.Length == 0)
{
// save for in case cannot find closer match
defaultCtor = ctor;
continue;
}
if (paramList.Length == 1 &&
paramList[0].ParameterType.IsAssignableFrom(arrayType))
{
try
{
// invoke first constructor that can take this value as an argument
return ctor.Invoke(
new object[] { value }
);
}
catch
{
// there might exist a better match
continue;
}
}
}
if (defaultCtor == null)
{
throw new JsonTypeCoercionException(
String.Format(TypeCoercionUtility.ErrorDefaultCtor, targetType.FullName));
}
object collection;
try
{
// always try-catch Invoke() to expose real exception
collection = defaultCtor.Invoke(null);
}
catch (TargetInvocationException ex)
{
if (ex.InnerException != null)
{
throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException);
}
throw new JsonTypeCoercionException("Error instantiating " + targetType.FullName, ex);
}
// many ICollection types have an AddRange method
// which adds all items at once
MethodInfo method = targetType.GetMethod("AddRange");
ParameterInfo[] parameters = (method == null) ?
null : method.GetParameters();
Type paramType = (parameters == null || parameters.Length != 1) ?
null : parameters[0].ParameterType;
if (paramType != null &&
paramType.IsAssignableFrom(arrayType))
{
try
{
// always try-catch Invoke() to expose real exception
// add all members in one method
method.Invoke(
collection,
new object[] { value });
}
catch (TargetInvocationException ex)
{
if (ex.InnerException != null)
{
throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException);
}
throw new JsonTypeCoercionException("Error calling AddRange on " + targetType.FullName, ex);
}
return collection;
}
else
{
// many ICollection types have an Add method
// which adds items one at a time
method = targetType.GetMethod("Add");
parameters = (method == null) ?
null : method.GetParameters();
paramType = (parameters == null || parameters.Length != 1) ?
//.........这里部分代码省略.........
示例2: GetMethod
public static MethodInfo GetMethod (Type type, MethodInfo method)
{
if (!IsValidGetMethodType (type))
throw new ArgumentException ("type is not TypeBuilder but " + type.GetType (), "type");
if (type is TypeBuilder && type.ContainsGenericParameters)
type = type.MakeGenericType (type.GetGenericArguments ());
if (!type.IsGenericType)
throw new ArgumentException ("type is not a generic type", "type");
if (!method.DeclaringType.IsGenericTypeDefinition)
throw new ArgumentException ("method declaring type is not a generic type definition", "method");
if (method.DeclaringType != type.GetGenericTypeDefinition ())
throw new ArgumentException ("method declaring type is not the generic type definition of type", "method");
if (method == null)
throw new NullReferenceException (); //MS raises this instead of an ArgumentNullException
MethodInfo res = type.GetMethod (method);
if (res == null)
throw new ArgumentException (String.Format ("method {0} not found in type {1}", method.Name, type));
return res;
}